在MVC中,controller中的Action和View中的.cshtml文件名稱有一個對應的關係。 當不對應時,有以下幾種情況發生: 一、找不到視圖的錯誤 請求URL:http://localhost:13850/Customer/Create controller中有對應的Action: Vi ...
在MVC中,controller中的Action和View中的.cshtml文件名稱有一個對應的關係。
當不對應時,有以下幾種情況發生:
一、找不到視圖的錯誤
請求URL:http://localhost:13850/Customer/Create
controller中有對應的Action:
View中沒有相應的視圖
報錯信息:
解決方式:在View中添加相應的View
二、找不到資源:
請求的URL:http://localhost:13850/Customer/Index
controller里沒有相應的Action(有時候可能是在開發一段時間以後,修改了Action的名字,卻沒有相應的修改View的名字,但是請求的URL依然還是原來的導致的)
View里有相應的視圖
錯誤信息:
解決方式,就是指定一個固定的“頁”,在找不到資源時顯示。具體如下:
Asp.Net MVC中的controller都是集成自Controller這個抽象類,在這個類中,定義了一個HandleUnknownAction 方法,左右就是在發生HTTP 404時,進行處理。
那麼,我們可以在自己的controller里重寫這個方法。
這樣,在每次找不到相應的Action時,都能執行這個方法。去調用相應的View。
微軟提供的方式是:
protected override void HandleUnknownAction(string actionName)
{
try {
this.View(actionName).ExecuteResult(this.ControllerContext);
} catch (InvalidOperationException ieox )
{
ViewData["error"] = "Unknown Action: \"" +Server.HtmlEncode(actionName) + "\"";
ViewData["exMessage"] = ieox.Message;
this.View("Error").ExecuteResult(this.ControllerContext);
}
}
也就是,輸出錯誤頁。
當然這也存在一個隱患,如果出現下麵【三】的情況時,也就是只聲明瞭一個HTTP.Post的方法,沒有相應的Http.Get的同名方法,也能把通過這種方式,把頁面載入出來。
怎麼解決呢?答案就是:直接Response.Redirect("/",true),回到首頁。
三、找不到資源:
請求URL:http://localhost:13850/Customer/Details
controller中的對應Action,定義為HTTP Post,且沒有對應的Http Get的Action
View中有對應的視圖
報錯信息:
解決方式:加入一個同名Action,定義為HTTP GET:[AcceptVerbs(HttpVerbs.Get)]
四:這是我今天遇到的找半天沒找到原因,最後看http://www.cnblogs.com/xyang/archive/2011/11/24/2262003.html才發現的
備註,感謝http://www.cnblogs.com/xyang/archive/2011/11/24/2262003.html提供的解決辦法