ASP.NET MVC 3 无法识别 .cshtml 视图文件
Posted
技术标签:
【中文标题】ASP.NET MVC 3 无法识别 .cshtml 视图文件【英文标题】:ASP.NET MVC 3 won't recognise .cshtml view files 【发布时间】:2012-09-10 12:44:49 【问题描述】:我已将一个 mvc 3 应用从 vs 2010 移植到 vs2012。
移植的应用程序使用 .NET 4。
所有旧位都可以工作,但是对于在 vs 2012 中创建的新视图,视图引擎不会为视图寻找 .cshtml 文件。
例如,当用户在Solicitors区域的Welcome控制器上请求索引动作时,url为:
mysite.com/solicitors/welcome/gg
(其中 gg 是用户名)。在这种情况下,返回的错误是:
未找到视图“索引”或其主视图或没有视图引擎 支持搜索的位置。以下位置是 搜索:~/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,我可以看到找到了正确的控制器和操作。
路线数据
关键值
用户名: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);
【问题讨论】:
【参考方案1】:好的,明白了:
问题:
问题是我的视图模型是字符串类型的。在我的操作中,我传入了一个字符串作为模型参数:
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 的启发。
【讨论】:
【参考方案2】:它看起来就像您从错误消息中看到的那样:
~/Areas/Solicitors/Views/Welcome/gg.cshtml
如果您需要查找索引视图,那么您需要指定它:
http://mysite.com/solicitors/welcome/index/gg
【讨论】:
这行得通,但是使用我正在使用的路线(请参阅问题的编辑),我不需要在 url 中指定操作。 确实应该可以。它对我有用。我无法重现您描述的问题。 谢谢你帮助达林。解决方案在我对我的问题的回答中。不知道为什么会这样,但解决方案有效。以上是关于ASP.NET MVC 3 无法识别 .cshtml 视图文件的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET MVC 5 默认模板的JS和CSS 是怎么加载的?
将 [Authorize] 添加到控制器无法重定向到身份登录路由。 ASP.NET 核心 3.1 MVC