加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

Asp.Net MVC5 – Html.Action – 属性路由 – 导致异常的奇怪行

发布时间:2020-12-16 07:25:29 所属栏目:asp.Net 来源:网络整理
导读:以下是我整个网站中不同操作和视图的一些奇怪行为: 每当我POST一些动作方法并且Model.IsValid为false时,我都会返回视图.每当在返回的视图中调用Html.Action()时,我都会遇到以下异常: (System.Web.HttpException): No matching action was found on control
以下是我整个网站中不同操作和视图的一些奇怪行为:

每当我POST一些动作方法并且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操作方法中返回View(),Html.Action总是在POST返回View()之后抛出此异常.这是我网站上的一般模式.

跆拳道?有什么想法在这里出了什么问题?我唯一能想到的是我随着时间的推移添加了更多的路线,现在它很困惑.如果是这样的话,我该如何修复或测试?

我刚想到我有很多路由/动作方法,其中动作方法的路径的get和post版本是相同的,除了action方法的GET或POST属性.我以前确定每条路线都是完全独特的,因为我得到了一些歧义,但是将其改回了相同的路线,用于获取和后置动作方法,唯一的区别是get或post属性……我变得确信它是路由问题,但我不知道具体是什么问题.我有数百种动作方法的路由属性.

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

更新:

一些示例代码,不确定它会有所帮助,因为相同的事情发生在许多完全不同的动作方法和视图中的模式,无论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,爆炸,异常.每次.

解决方法

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

问题是Html.Action()似乎总是遇到异常而不是在GET之后,返回View(),而是POST,返回View().

年龄之前,我浏览了整个网站并标记了每个不具有[HttpGet]属性的帖子的操作方法.我没有意识到这会导致问题.总是测试!

从Html.Action()调用的动作方法中删除[HttpGet]属性已经解决了这个问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读