我已经从vs 2010移植到vs2012的mvc 3应用程序。
移植的应用程序正在使用.NET 4.
所有旧位都有效,但是在vs 2012中创建的新视图中,视图引擎不会查找视图的.cshtml文件。
例如,当用户在Solicitors区域中的Welcome控制器上请求索引操作时,URL为:
mysite.com/solicitors/welcome/gg
(其中gg是用户名)。在这种情况下,返回的错误是:
未找到视图“索引”或其主控或没有查看引擎 支持搜索的位置。以下地点是 搜索:〜/领域/律师/意见/欢迎/ Index.aspx 〜/地区/律师/浏览/首页/ Index.ascx 〜/地区/律师/查看/共享/的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 〜/地区/律师/浏览/首页/ gg.vbhtml 〜/地区/律师/查看/共享/ gg.cshtml 〜/ Areas / Solicitors / Views / Shared / gg.vbhtml~ / Views / Welcome / gg.cshtml 〜/ Views / Welcome / gg.vbhtml~ / Views / Shared / gg.cshtml 〜/查看/共享/ 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 }
);
使用RouteDebug,我可以看到找到了正确的控制器和动作。
路线数据
关键值
nameUser:gg
控制器:欢迎
行动:指数
数据令牌
关键值
命名空间:System.String []
地区:律师
UseNamespaceFallback:False
正确找到路径,正如我在调试中看到的那样:索引操作已被命中。
调用视图调用行时会出现问题:
namespace MyApp.Areas.Solicitors.Controllers
{
[Authorize]
public partial class WelcomeController : Controller
{
//
// GET: /Solicitors/Welcome/
public virtual ActionResult Index(string nameUser)
{
return View("Index", nameUser);
}
}
}
答案 0 :(得分:24)
好的,到底了:
问题是我的视图模型是string类型。在我的动作中,我传入一个字符串作为模型参数:
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的启发。
答案 1 :(得分:1)
正如您从错误消息中看到的那样:
~/Areas/Solicitors/Views/Welcome/gg.cshtml
如果您需要查找索引视图,则需要指定它:
http://mysite.com/solicitors/welcome/index/gg