2012-01-09 44 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