ASP.NET MVC 3无法识别.cshtml视图文件

awr*_*ley 10 asp.net-mvc-3 visual-studio-2012

我已经从vs 2010移植到vs2012的mvc 3应用程序.

移植的应用程序使用的是.NET 4.

所有旧位都有效,但是在vs 2012中创建的新视图中,视图引擎不会查找视图的.cshtml文件.

例如,当用户在"请求者"区域中的"欢迎"控制器上请求索引操作时,该URL为:

mysite.com/solicitors/welcome/gg 
Run Code Online (Sandbox Code Playgroud)

(其中gg是用户名).在这种情况下,返回的错误是:

未找到视图"索引"或其主数据或视图引擎不支持搜索的位置.搜寻下列地点:〜/地区/律师/意见/欢迎/ Index.aspx~ /地区/律师/意见/欢迎/ Index.ascx~ /地区/律师/意见/共享/ Index.aspx~ /地区/律师/Views/Shared/Index.ascx~/ Views/Welcome/Index.aspx~/Views/Welcome/Index.ascx~/Views/Shared/Index.aspx~/Views/Shared/Index.ascx~/Areas/Solicitors /意见/欢迎/ 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" />
Run Code Online (Sandbox Code Playgroud)

编辑:

SolictorAreaRegistration.cs中的路由:

context.MapRoute(
                "Solicitors_Welcome",
                "Solicitors/Welcome/{nameUser}",
                new { controller = "Welcome", action = "Index", nameUser = UrlParameter.Optional }
            );
Run Code Online (Sandbox Code Playgroud)

编辑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);
        } 
    }
}
Run Code Online (Sandbox Code Playgroud)

awr*_*ley 24

好的,到底了:

问题:

问题是我的视图模型是字符串类型.在我的操作中,我传入一个字符串作为模型参数:

public virtual ActionResult Index(string nameUser)
        {
            return View("Index", nameUser);
        }
Run Code Online (Sandbox Code Playgroud)

这将与Controller.View(...)的一个重载冲突:

View(string, string)
Run Code Online (Sandbox Code Playgroud)

第二个参数需要布局文件的名称.执行此操作时,MVC将寻找一个名称为字符串值的布局文件,例如:

"你好,世界.我是个白痴,但如果你给我一个不错的错误信息,我可以修复这个错误."

显然,不存在具有该名称的布局文件.布局文件也不称为"gg"(我的(测试)律师的用户名).

解决方案:

解决方案很简单:

指定第二个参数是模型,而不是布局.

public virtual ActionResult Index(string nameUser)
        {
            return View("Index", model: nameUser);
        }
Run Code Online (Sandbox Code Playgroud)

有用的文章:

要查看对此问题的扩展讨论,请参阅以下文章:

MVC Gotcha:在使用视图时要小心,模型是一个字符串

非常感谢heartysoft.com的启示.