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)
使用RouteDebug,我可以看到找到了正确的控制器和操作.
路线数据
核心价值
nameUser:gg
控制器:欢迎
行动:指数
数据令牌
核心价值
命名空间:System.String []
地区:律师
UseNamespaceFallback:False
正如我在调试中看到的那样,路径被正确找到:索引操作被命中.
调用视图的行调用时会发生此问题:
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)
要查看对此问题的扩展讨论,请参阅以下文章:
非常感谢heartysoft.com的启示.
| 归档时间: |
|
| 查看次数: |
2791 次 |
| 最近记录: |