【问题标题】:Controller method overloading using attribute routing使用属性路由的控制器方法重载
【发布时间】:2015-03-26 14:06:31
【问题描述】:

我可以更改方法名称,但谁能告诉我为什么这不起作用?如何在不更改方法名称的情况下使其工作。另外我不想在视图中指定操作名称。有可能吗?

        [HttpGet]
        [Route("AddUpdateCategories/{storeId}")]
        public ActionResult AddUpdateStoreCategories(int storeId)
        {

            return View();
        }

        [HttpPost]
        public ActionResult AddUpdateStoreCategories(int StoreId,int[] ShopCategoryId)
        {

            return null;
        }

问题是提交时未调用发布操作。

【问题讨论】:

    标签: asp.net-mvc attributerouting


    【解决方案1】:

    您不必更改方法名称。问题是这个发布动作没有路线。如果使用属性路由,则必须为每个操作指定一个路由。这两个操作最终都会使用相同的路由属性,但[HttpPost] 属性足以让路由框架确定使用哪一个。

    [Route("AddUpdateCategories/{storeId}")]
    public ActionResult AddUpdateStoreCategories(int storeId)
    {
        return View();
    }
    
    [HttpPost]
    [Route("AddUpdateCategories/{storeId}")]
    public ActionResult AddUpdateStoreCategories(int StoreId,int[] ShopCategoryId)
    {
        return null;
    }
    

    【讨论】:

    • 是的,我知道在 post 操作中添加 [Route("AddUpdateCategories/{storeId}")] 会起作用。但这看起来我只在不正确的方法中传递了 storeId。你有什么澄清吗?还是我错过了什么?
    • 不,路由与方法定义相同。在路由中包含storeId 仅意味着它将成为该特定参数的来源。您仍然可以有其他参数,并且它们都不必在路由中。
    • 非常感谢。我在理解属性路由方面遇到了很多问题。有时会被误导。
    猜你喜欢
    • 2014-04-20
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    相关资源
    最近更新 更多