asp.net-mvc-3 – ASP.NET MVC 3将无法识别.cshtml视图文件

前端之家收集整理的这篇文章主要介绍了asp.net-mvc-3 – ASP.NET MVC 3将无法识别.cshtml视图文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经从2010年的vs2012移植了一个mvc 3应用程序.

移植的应用程序正在使用.NET 4.

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

例如,当用户在Solicitors区域中的Welcome控制器上请求索引操作时,url是:

mysite.com/solicitors/welcome/gg

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

The view ‘Index’ or its master was not found or no view engine
supports the searched locations. The following locations were
searched: ~/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,我可以看到找到正确的控制器和操作.

路线数据

关键价值

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

解决方法

好的,它的底部

问题:

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

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的启发.

猜你在找的asp.Net相关文章