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

时间:2012-09-10 12:44:49

标签: asp.net-mvc-3 visual-studio-2012

我已经从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 }
            );

编辑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);
        } 
    }
}

2 个答案:

答案 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