即使它在那里也找不到视图,它不是在寻找正确的扩展名

时间:2012-01-09 13:52:30

标签: c# asp.net-mvc-3 razor

我对这个感到困惑。我正在使用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 } );
}

虽然这现在有效但我仍然不知道为什么以前没有用。我将我的视图设置为在构建时编译,因此没有编译器错误。

我很想知道这里发生了什么。

1 个答案:

答案 0 :(得分:12)

您使用的View method的重载需要两个字符串。它不会将第二个字符串解释为模型,而是将其解释为主页面名称:

protected internal ViewResult View(
    string viewName,
    string masterName
)

如果您这样称呼它,它会起作用:

return View("Unsubscribe", (object) maskedId);