我对这个很困惑。我将 Razor 与 MVC 3 一起使用,我对一个操作的一个 View 有问题。
[HttpGet]
[ActionName("Unsubscribe")]
public ActionResult UnsubscribeGet(string maskedId)
{
return View("Unsubscribe", maskedId);
}
Unsubscribe.cshtml View 位于正确的 View 文件夹中。
路线是
routes.MapRoute(
"", // Route name
"Unsubscribe/{maskedId}", // URL with parameters
new { controller = "Account", action = "Unsubscribe" });
当转到以下 url“/Unsubscribe/db94fddb”时,操作会触发,然后在它尝试查找 View 时显示以下错误。
未找到“取消订阅” View 或其主视图,或者没有 View 引擎支持搜索的位置。搜索了以下位置:
~/Views/Account/Unsubscribe.aspx
~/Views/Account/Unsubscribe.ascx
~/Views/Shared/Unsubscribe.aspx
~/Views/Shared/Unsubscribe.ascx
~/Views/Account/db94fddb.master
~/Views/Shared/db94fddb.master
~/Views/Account/db94fddb.cshtml
~/Views/Account/db94fddb.vbhtml
~/Views/Shared/db94fddb.cshtml
~/Views/Shared/db94fddb.vbhtml
请注意,它在查找 Unsubscribe 时不查找 cshtml 扩展名,但在查找 db94fddb 时查找
这只发生在这个 View 中,完全不知道如何修复它。
** 编辑 **
找到了,
我使用 System.String 作为模型。由于某种原因导致它爆炸。
我把它换成了@model UnsubscribeViewModel
[HttpGet]
[ActionName("Unsubscribe")]
public ActionResult UnsubscribeGet(string maskedId)
{
return View("Unsubscribe", new UnsubscribeViewModel { MaskedId = maskedId } );
}
虽然这现在有效,但我仍然不知道为什么它以前不起作用。我将我的 View 设置为在构建时编译,因此没有编译器错误。
我很想知道这里发生了什么。
最佳答案
View
method 的过载您使用的是两个字符串。它不会将第二个字符串解释为模型,而是将其解释为母版页名称:
protected internal ViewResult View(
string viewName,
string masterName
)
如果你改为这样调用它,它会起作用:
return View("Unsubscribe", (object) maskedId);
关于c# - 即使它在那里也找不到 View ,它不是在寻找正确的扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8789429/