移植的应用程序正在使用.NET 4.
所有旧的位都有效,但是在vs 2012中创建的新视图中,视图引擎不是为视图寻找.cshtml文件.
例如,当用户在Solicitors区域中的Welcome控制器上请求索引操作时,url是:
mysite.com/solicitors/welcome/gg
The view ‘Index’ or its master was not found or no view engine
supports the searched locations. The following locations were
searched: ~/Areas/Solicitors/Views/Welcome/Index.aspx
~/Areas/Solicitors/Views/Welcome/Index.ascx
~/Areas/Solicitors/Views/Shared/Index.aspx
~/Areas/Solicitors/Views/Shared/Index.ascx ~/Views/Welcome/Index.aspx
~/Views/Welcome/Index.ascx ~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx ~/Areas/Solicitors/Views/Welcome/gg.master
~/Areas/Solicitors/Views/Shared/gg.master ~/Views/Welcome/gg.master
~/Views/Shared/gg.master ~/Areas/Solicitors/Views/Welcome/gg.cshtml
~/Areas/Solicitors/Views/Welcome/gg.vbhtml
~/Areas/Solicitors/Views/Shared/gg.cshtml
~/Areas/Solicitors/Views/Shared/gg.vbhtml ~/Views/Welcome/gg.cshtml
~/Views/Welcome/gg.vbhtml ~/Views/Shared/gg.cshtml
~/Views/Shared/gg.vbhtml
我已经在web.config中添加了以下密钥给appsettings,但没有任何区别.
<add key="webpages:Version" value="1.0" />
编辑:
路线在SolictorAreaRegistration.cs:
context.MapRoute( "Solicitors_Welcome","Solicitors/Welcome/{nameUser}",new { controller = "Welcome",action = "Index",nameUser = UrlParameter.Optional } );
编辑2:
使用RouteDebug,我可以看到找到正确的控制器和操作.
路线数据
关键价值
nameUser:gg
控制器:欢迎
动作:索引
数据令牌
关键价值
命名空间:System.String []
区域:律师
UseNamespaceFallback:False
编辑3:
正确找到路由,从调试中可以看到:索引操作被击中.
namespace MyApp.Areas.Solicitors.Controllers { [Authorize] public partial class WelcomeController : Controller { // // GET: /Solicitors/Welcome/ public virtual ActionResult Index(string nameUser) { return View("Index",nameUser); } } }
解决方法
问题:
问题是我的视图模型是字符串类型.在我的动作中,我传递一个字符串作为模型参数:
public virtual ActionResult Index(string nameUser) { return View("Index",nameUser); }
这将与Controller.View(…)的一个重载冲突:
View(string,string)
第二个参数期望布局文件的名称.当您这样做时,MVC会查找一个名称为字符串值的布局文件,例如:
“你好,世界,我是一个白痴,但如果你给我一个体面的错误信息,我可能可以修复这个错误.”
显然,具有该名称的布局文件不存在.也没有一个名为“gg”的布局文件(我的(测试)律师的用户名)).
解决方案:
解决方案很简单:
指定第二个参数是型号,而不是布局.
public virtual ActionResult Index(string nameUser) { return View("Index",model: nameUser); }
有用的文章:
要查看有关此问题的扩展讨论,请参阅以下文章:
MVC Gotcha: Beware when using your view’s model is a string
非常感谢heartysoft.com的启发.