我对这个感到困惑。我正在使用razor和MVC 3,我对一个动作的一个视图有问题。
[HttpGet]
[ActionName("Unsubscribe")]
public ActionResult UnsubscribeGet(string maskedId)
{
return View("Unsubscribe", maskedId);
}
Unsubscribe.cshtml视图位于正确的视图文件夹中。
路线是
routes.MapRoute(
"", // Route name
"Unsubscribe/{maskedId}", // URL with parameters
new { controller = "Account", action = "Unsubscribe" });
当转到以下URL“/ Unsubscribe / db94fddb”时,操作将触发,然后在尝试查找视图时显示以下错误。
未找到视图'取消订阅'或其主文件或视图引擎不支持搜索的位置。搜索了以下位置:
〜/查看/帐号/ Unsubscribe.aspx
〜/查看/帐号/ Unsubscribe.ascx
〜/查看/共享/ Unsubscribe.aspx
〜/查看/共享/ Unsubscribe.ascx
〜/查看/帐号/ db94fddb.master
〜/查看/共享/ db94fddb.master
〜/查看/帐号/ db94fddb.cshtml
〜/查看/帐号/ db94fddb.vbhtml
〜/查看/共享/ db94fddb.cshtml
〜/ Views / Shared / db94fddb.vbhtml
请注意,在查找Unsubscribe时它不会查找cshtml扩展名,但在查找db94fddb时会查找
这只发生在这种观点上,完全不知道如何修复它。
**编辑**
找到它,
我使用System.String作为模型。由于某些原因导致它爆炸。
我将其换为@model UnsubscribeViewModel
[HttpGet]
[ActionName("Unsubscribe")]
public ActionResult UnsubscribeGet(string maskedId)
{
return View("Unsubscribe", new UnsubscribeViewModel { MaskedId = maskedId } );
}
虽然这现在有效但我仍然不知道为什么以前没有用。我将我的视图设置为在构建时编译,因此没有编译器错误。
我很想知道这里发生了什么。
答案 0 :(得分:12)
您使用的View
method的重载需要两个字符串。它不会将第二个字符串解释为模型,而是将其解释为主页面名称:
protected internal ViewResult View(
string viewName,
string masterName
)
如果您这样称呼它,它会起作用:
return View("Unsubscribe", (object) maskedId);