代码之家  ›  专栏  ›  技术社区  ›  Andrey Tagaew

如何使mvc在控制器中选择合适的动作

  •  2
  • Andrey Tagaew  · 技术社区  · 15 年前

    有人能给我解释一件事吗?

    我的控制器有两种方法:

    public ActionResult AddPredefinedTicket(int customerId) {...}

    public ActionResult AddPredefinedTicket(int customerId, TicketTypes type, string additionalJsonParameters) {...} (here TicketTypes is enum)

    我想用类似url的

    http://.../Ticket/AddPredefinedTicket?customerId=1082

    出于某种原因,我有个例外:

    The current request for action 'AddPredefinedTicket' on controller type 'TicketController' is ambiguous between the following action methods: System.Web.Mvc.ActionResult AddPredefinedTicket(Int32) on type CallCenter.CustomerService.Controllers.TicketController System.Web.Mvc.ActionResult AddPredefinedTicket(Int32, CallCenter.CustomerService.Data.Models.TicketTypes, System.String) on type CallCenter.CustomerService.Controllers.TicketController

    但是,我不明白为什么mvc认为请求是不明确的。 从我的url调用中可以看到,我没有传递“type”或“additionaljsonparameters”参数。 我知道,additionaljsonparameters是字符串,所以它可以是空的。

    但该操作也有“type”参数,即enum,不能为空。

    在我看来,MVC应该使用第一个动作,但不是。

    你能解释一下原因吗?

    3 回复  |  直到 15 年前
        1
  •  0
  •   OhBugger    15 年前

    您不能重载ActionResults。

    控制器操作必须满足一些附加要求。不能重载用作控制器操作的方法。此外,控制器操作不能是静态方法。除此之外,您可以使用任何方法作为控制器操作。

    见: http://www.asp.net/Learn/mvc/tutorial-03-cs.aspx

        2
  •  1
  •   AJ.    15 年前

    你忘了用[httpget],[httppost]属性装饰你的方法了吗?

        3
  •  0
  •   kmehta    15 年前

    将第一个方法中的逻辑放入第二个方法中。

    像这样把支票放进去

    if(type==null && string.IsNullOrEmpty(additionalJsonParameters){
    //do logic from method 1
    }
    else{
    //do logic from method 2
    }