c# - 即使它在那里也找不到 View ,它不是在寻找正确的扩展名

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

我对这个很困惑。我将 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/

相关文章:

javascript - 未捕获的类型错误 : Cannot read property 'Constructor' of undefined

asp.net-mvc - 在 Razor View 中有条件地禁用文本框

c# - 以千为单位的数字格式

c# - LinQ ofType in 值

asp.net-mvc - 如何让 ASP.NET MVC Action 返回不同的格式?

c# - BundleConfig.cs 没有引用任何内容?

javascript - 如何使用 ViewBag 在 MVC3 Razor 下为 JavaScript 变量赋值

C#获取正在运行的应用程序列表及其路径以进行字符串扫描

c# - Task<ObservableCollection<AppointmentItem>> 不包含 where 的定义

c# - 逐步在 ASP.Net Web API 上运行 swashbuckle