2012-01-09 37 views
4

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

当去到以下网址“/取消/ db94fddb”,动作大火,然后显示在下面的错误当它试图找到该视图。

未找到'取消订阅'或其主人的视图或没有视图引擎支持搜索到的位置。以下地点搜索:
〜/查看/帐号/ Unsubscribe.aspx
〜/查看/帐号/ Unsubscribe.ascx
〜/查看/共享/ Unsubscribe.aspx
〜/查看/共享/ Unsubscribe.ascx
〜/查看/帐户/ db94fddb.master
〜/查看/共享/ db94fddb.master
〜/查看/帐户/ db94fddb.cshtml
〜/查看/帐户/ db94fddb.vbhtml
〜/查看/ Shared/db94fddb.cshtml
〜/ Views/Shared/db94fddb.vbhtml

注意寻找退订时寻找db94fddb

时,这仅与这种观点发生了,完全就如何解决它受损失,它看起来并不为CSHTML扩展,但确实。

**编辑**

发现了它,

我用System.String作为模型。由于某种原因导致它炸毁。

我把它换到@model UnsubscribeViewModel

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

虽然这现在工作我仍然不知道为什么没有工作之前。我将我的视图设置为在编译时进行编译,因此没有编译器错误。

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

回答

11

您使用的View method的超载需要两个字符串。它不解释第二个字符串作为一个模型,它解释为母版页名称:

protected internal ViewResult View(
    string viewName, 
    string masterName 
) 

如果你不是把它称为这样,它的工作:

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

甚至没有考虑过载。感谢上帝在4中的命名参数。谢谢你的答案! – 2012-04-28 03:29:12

+0

感谢上帝为这个答案。这个问题让我疯狂。 – 5arx 2016-06-07 14:21:15

相关问题