【问题标题】:Can't find view even though it's there, it's not looking for the correct extension即使它在那里也找不到视图,它不是在寻找正确的扩展名
【发布时间】:2012-01-09 13:52:30
【问题描述】:

我对这个感到困惑。我在 MVC 3 中使用 razor,但我对一个操作的一个视图有问题。

 [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" });

当转到以下网址“/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 } );
}

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

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

【问题讨论】:

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


    【解决方案1】:

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

    protected internal ViewResult View(
        string viewName,
        string masterName
    )
    

    如果你改为这样称呼它,它会起作用:

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

    【讨论】:

    • 甚至没有考虑过载。谢天谢地,4中的命名参数。谢谢你的回答!
    • 感谢上帝的回答。这个问题把我逼疯了。
    猜你喜欢
    • 2020-04-10
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 2022-01-08
    相关资源
    最近更新 更多