首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET MVC 3不会识别.cshtml视图文件

ASP.NET MVC 3不会识别.cshtml视图文件
EN

Stack Overflow用户
提问于 2012-09-10 12:44:49
回答 2查看 2.9K关注 0票数 10

我已经移植了一个mvc 3应用程序从vs 2010到vs2012。

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

所有的旧位都可以工作,但是使用vs 2012中创建的新视图,视图引擎不会为视图寻找.cshtml文件。

例如,当用户请求律师区域中欢迎控制器上的索引操作时,url是:

代码语言:javascript
复制
mysite.com/solicitors/welcome/gg 

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

未找到视图“索引”或其主目录,或者没有视图引擎支持搜索的位置。搜索了下列地点:~/Shared/律师/视图/Welcome/Index.aspx~/Shared/Solicitors/Views/Welcome/Index.ascx~/Shared/Solicitors/Views/Shared/Index.aspx~/Shared/Solicitors/Views/Shared/Index.ascx ~/Views/Welcome/Index.aspx ~/Views/Welcome/Index.ascx ~/Views/Shared/Index.aspx ~/Views/Shared/Index.ascx ~/Shared/Solicitors/Views/Welcome/ The /主/地区/律师/律师/视图/Shared/gg.master ~/Views/Welcome/gg.master ~/视图/Shared/gg.master~/领域/律师/视图/Welcome/gg.cshtml~/Shared/Solicitors/Views/Welcome/gg.vbhtml~/Shared/Solicitors/Views/Shared/gg.cshtml~//Solicitor/Views/Shared/gg.vbhtml ~/Views/Welcome/gg.cshtml ~/Views/Welcome/gg.vbhtml ~/Views/gg.cshtml ~/Views/Shared/gg.vbhtml

我已经为web.config中的应用设置添加了以下键,但这并没有什么区别。

代码语言:javascript
复制
<add key="webpages:Version" value="1.0" />

编辑:

SolictorAreaRegistration.cs中的路由:

代码语言:javascript
复制
context.MapRoute(
                "Solicitors_Welcome",
                "Solicitors/Welcome/{nameUser}",
                new { controller = "Welcome", action = "Index", nameUser = UrlParameter.Optional }
            );

编辑2:

使用RouteDebug,我可以看到找到了正确的控制器和操作。

路由数据

键值

nameUser: gg

控制员:欢迎

行动:索引

数据标记

键值

名称空间: System.String[]

工作范围:律师

UseNamespaceFallback:假

编辑3:

正如我从调试中看到的那样,正确地找到了路由:命中了Index操作。

当调用视图时,会发生以下问题:

代码语言:javascript
复制
namespace MyApp.Areas.Solicitors.Controllers
{
    [Authorize]
    public partial class WelcomeController : Controller
    {
        //
        // GET: /Solicitors/Welcome/
        public virtual ActionResult Index(string nameUser)
        {
            return View("Index", nameUser);
        } 
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-10 17:51:50

好吧,说到最下面:

问题是:

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

代码语言:javascript
复制
public virtual ActionResult Index(string nameUser)
        {
            return View("Index", nameUser);
        }

这将与Controller.View(.)的重载之一发生冲突:

代码语言:javascript
复制
View(string, string)

第二个参数需要布局文件的名称。当您这样做时,MVC开始寻找一个具有字符串值名称的布局文件,例如:

“你好,世界。我是个白痴,但是如果你给我一条正确的错误信息,我也许能修复这个错误。”

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

解决办法:

解决办法很简单:

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

代码语言:javascript
复制
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的启示。

票数 26
EN

Stack Overflow用户

发布于 2012-09-10 12:54:10

从错误消息中可以看到:

代码语言:javascript
复制
~/Areas/Solicitors/Views/Welcome/gg.cshtml 

如果需要查找Index视图,则需要指定它:

代码语言:javascript
复制
http://mysite.com/solicitors/welcome/index/gg 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12352001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档