3

下面是一些怪異的行爲是跨在我的整個網站不同的行動和觀點是一致的:Asp.Net MVC5 - Html.Action - 屬性路由 - 怪異的行爲引起異常

每當我發佈的一些操作方法和模式.IsValid是假的,我返回視圖。每當Html.Action()被調用返回的觀點我得到這個異常:

(System.Web.HttpException): No matching action was found on controller 'xyz'. 

This can happen when a controller uses RouteAttribute for routing, 
but no action on that controller matches the request. 

我使用屬性的路由。

public class RouteConfig 
{ 
    // REGISTER ROUTES 

    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.MapMvcAttributeRoutes();   
    }  
} 

因此,即使Html.Action通話工作的第一次在GET操作方法返回查看(),Html.Action總是拋出後POST返回查看此異常()。這是我整個網站的一般模式。

Wtf?任何想法在這裏出了什麼問題?我能想到的唯一的事情是,我隨着時間的推移添加了更多的路線,現在它感到困惑。如果情況如此,我將如何修復或測試?

我剛纔想到,我有許多路由/操作方法,其中操作方法的路由的獲取和發佈版本除了操作方法上的GET或POST屬性相同外。我以前確保每條路線都是完全獨特的,因爲我得到了一些不明確的地方,但將它改回到獲取和發佈操作方法的相同路線,唯一的區別是get或post屬性......我漸漸確信它是一個路由問題,但我不知道具體有什麼問題。我擁有數百種操作方法的路由屬性。

我從來沒有見過像這樣微妙的東西,甚至不知道如何開始解決這樣的事情。我不知道它是簡單還是複雜的,如果它是我的代碼或框架。任何幫助將不勝感激。

UPDATE:

一些示例代碼,不知道它會幫助,因爲同樣的事情發生,因爲在許多完全不同的操作方法和觀點的模式,無論GET,POST,授權,未經授權的,在角色或不,抗僞造...

標準Html.Action從視圖中調用。大部分時間都能正常工作。 (不同的重載沒有什麼區別。)

@Html.Action("CategoryDropDowns", "Category") 

這裏是被調用(正是獲取返回沒什麼區別,可能是一個的ViewResult,可能是一個int)。

// GET: /category/category-drop-downs 
[HttpGet] 
[Route("category/category-drop-downs")]   
public ViewResult CategoryDropDowns() 
{ 

} 

如果驗證失敗視圖返回:

public ActionResult CreateListing(ListDetails listDetails) 
{          
    if (ModelState.IsValid) 
    { 
    } 
    else 
    { 
     return View("List", model); 
    } 
} 

而且通過時被返回的觀點調試,即能正常工作的第一次調用Html.Action拋出異常。同樣的事情發生在我的網站上。返回View(),點擊Html.Action,bang,異常。每次。

+0

您需要顯示相關代碼 –

+0

請參閱我的更新,瞭解一般模式。這段代碼正是我對特定操作/視圖所做的,但是每當代碼碰到返回的View()時,該視圖就包含Html.Action(),bang,exception。還有什麼你想看到的? – nmit026

+0

你的路由設置也可能有幫助 – Andrei

回答

6

從子操作中刪除[HttpGet]屬性!

問題是Html.Action()似乎總是在GET之後觸發異常,返回View(),但POST返回View()。上一次我瀏覽了整個網站,並且標記了每一個不是帶有[HttpGet]屬性的帖子的操作方法。我沒有意識到這會造成問題。經常測試!

從Html.Action()調用的操作方法中刪除[HttpGet]屬性解決了這個問題。