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

Mag*_*pie 4 c# razor asp.net-mvc-3

我对这个感到困惑.我正在使用razor和MVC 3,我对一个动作的一个视图有问题.

 [HttpGet]
 [ActionName("Unsubscribe")]
 public ActionResult UnsubscribeGet(string maskedId)
 {    
     return View("Unsubscribe", maskedId);
  }
Run Code Online (Sandbox Code Playgroud)

Unsubscribe.cshtml视图位于正确的视图文件夹中.

路线是

routes.MapRoute(
               "", // Route name
               "Unsubscribe/{maskedId}", // URL with parameters
               new { controller = "Account", action = "Unsubscribe" });
Run Code Online (Sandbox Code Playgroud)

当转到以下URL"/ Unsubscribe/db94fddb"时,操作将触发,然后在尝试查找视图时显示以下错误.

未找到"取消订阅"视图或其主页,或者视图引擎不支持搜索的位置.搜索了以下位置:
〜/ 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时会查找

只有这种观点才会发生这种情况,完全不知道如何修复它.

**编辑**

找到了,

我使用System.String作为模型.由于某些原因导致它爆炸.

我交换了它 @model UnsubscribeViewModel

[HttpGet]
[ActionName("Unsubscribe")]
public ActionResult UnsubscribeGet(string maskedId)
{
    return View("Unsubscribe", new UnsubscribeViewModel { MaskedId = maskedId } );
}
Run Code Online (Sandbox Code Playgroud)

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

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

Pau*_*yng 12

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

protected internal ViewResult View(
    string viewName,
    string masterName
)
Run Code Online (Sandbox Code Playgroud)

如果您这样称呼它,它将工作:

return View("Unsubscribe", (object) maskedId);
Run Code Online (Sandbox Code Playgroud)