Asp.NETMVC5-Html.Action-Attribute Routing-Weird行为导致异常

Asp.NETMVC5-Html.Action-Attribute Routing-Weird行为导致异常,asp.net,asp.net-mvc,asp.net-mvc-5,asp.net-mvc-routing,attributerouting,Asp.net,Asp.net Mvc,Asp.net Mvc 5,Asp.net Mvc Routing,Attributerouting,以下是一些奇怪的行为,这些行为在我整个网站的不同操作和视图中是一致的: 每当我发布到某个操作方法并且Model.IsValid为false时,我都会返回视图。无论何时在返回的视图中调用Html.Action(),都会出现以下异常: (System.Web.HttpException): No matching action was found on controller 'xyz'. This can happen when a controller uses RouteAttribute

以下是一些奇怪的行为,这些行为在我整个网站的不同操作和视图中是一致的:

每当我发布到某个操作方法并且Model.IsValid为false时,我都会返回视图。无论何时在返回的视图中调用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 Action方法return View()中第一次起作用,Html.Action总是在POST return View()之后抛出此异常。这是我网站上的一个通用模式

Wtf?知道这里出了什么问题吗?我能想到的唯一一件事是,随着时间的推移,我添加了更多的路线,现在它变得混乱了。如果是这样,我将如何修复或测试它

我刚刚想到,我有许多routes/action方法,其中action方法的routes的get和post版本是相同的,action方法上的get或post属性除外。我之前确保每个路由都是完全唯一的,因为我得到了一些模糊性,但将其更改回get和post操作方法的相同路由,唯一的区别是get或post属性。。。我开始相信这是一个路由问题,但我不知道具体出了什么问题。我有数百种动作方法的路由属性

我以前从未见过如此微妙的事情,甚至不知道如何开始解决这样的问题。我不知道是简单还是复杂,是我的代码还是框架。任何帮助都将不胜感激

更新:

一些示例代码,不确定它是否会有帮助,因为相同的事情作为一种模式发生在许多完全不同的操作方法和视图中,而不管GET、POST、authorized、unauthorized、角色与否、antiforgerytoken

从视图调用的标准Html.Action。大多数时候都很好。(不同的重载没有区别。)

下面是调用的内容(确切地说,返回的内容没有区别,可以是ViewResult,也可以是int)

如果验证失败,则返回视图:

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

在通过返回的视图进行调试后,第一次运行良好的对Html.Action的调用抛出异常。同样的事情发生在我的网站上。Return View(),点击Html.Action,砰,异常。每次。

从子操作中删除[HttpGet]属性

问题是Html.Action()似乎总是在GET,return View()之后出现异常,而不是在POST,return View()之后

很久以前,我浏览了我的整个网站,并用[HttpGet]属性标记了不是帖子的每个操作方法。我不知道这会引起问题。永远测试


从Html.action()调用的操作方法中删除[HttpGet]属性解决了这个问题。

您需要显示相关的代码请参阅我的更新,了解常规模式。这段代码正是我为某个特定操作/视图编写的代码,但是每当代码遇到一个返回视图(),并且该视图包含一个Html.action(),bang,exception时。还有什么您想看的吗?您的路由设置也可能有助于您的
@Html.Action()
使用
“categorhydropdowns”
,这是方法的名称,但是您的路由是
“category dropdowns”
?抱歉,太密集了,这是个问题吗?这些操作方法只由视图调用,除非您使用开发人员工具或fiddler或其他工具(如果您正在使用这些工具的话),否则无法看到url。我认为问题在于我的网站中有数百条属性路由,框架的属性路由部分出现了一些问题,我不知道是什么。我应该重申一下,浏览这个网站,Html.Action()工作正常。如果出于任何原因返回View(),则返回异常。我所能想到的就是剥离属性路由。救命啊!
// 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);
    }
}