【问题标题】:Two Actions in Controler with Different Parameter Settings Conflict不同参数设置的控制器中的两个动作冲突
【发布时间】:2016-11-04 19:13:38
【问题描述】:
我有两种具有不同选项格式的方法(操作),但是当我运行它时,我被告知它们是模棱两可的。方法如下所示。
public ActionResult SelectInstitutionToEdit(){...}
public ActionResult SelectInstitutionToEdit(string message){...}
【问题讨论】:
标签:
c#
asp.net-mvc
controller
actionmethod
【解决方案1】:
是的。您不能有多个具有相同名称(和相同 http 动词)的操作方法。
如果您希望两者都适用于 Http GET 请求,您可以保留第二个,并检查您的 message 参数的值并根据该值返回相关响应。
public ActionResult SelectInstitutionToEdit(string message)
{
if(String.IsNullOrEmpty(message))
{
// to do :Return something
}
// to do :Return something
}
这适用于yourSite/yourController/SelectInstitutionToEdit 和yourSite/yourController/SelectInstitutionToEdit?message=hello
【解决方案2】:
考虑更改您的签名:
public ActionResult SelectInstitutionToEdit(){...}
public ActionResult SelectInstitutionToEditWithString(string message){...}
【解决方案3】:
尽管由于方法重载,编译器会运行此代码而不会出现任何错误,但 MVC 框架不允许这样做。但是你可以使用ActionName属性:
public ActionResult SelectInstitutionToEdit(){...}
[ActionName("SelectInstitutionToEditWithParams")]
public ActionResult SelectInstitutionToEdit(string message){...}
那么你应该用它的新名字来称呼它。像这样:
@using (Html.BeginForm("SelectInstitutionToEditWithParams", "yourController"))
{
}
【解决方案4】:
如果重载的 Action 方法是相同的 get/post 调用,则使用 [ActionName("SomeOtherName")]。