控制器方法具有相同名称

时间:2013-06-18 08:24:49

标签: c# asp.net-mvc methods controller redirecttoaction

我有这个方法调用另外两个方法,但是当执行代码时我出错了。

public ActionResult CreateOrder(string action, string type)
    {
        /*Some Code*/
        if(MyObject.isOk){
            return RedirectToAction("EditOrder", new { code = ErrorCode, libelle = Description });

        }else{
            return RedirectToAction("EditOrder", new { nordre = NoOrdre });
        }
    }

public ActionResult EditOrder(string nordre)
    {

    }

[ActionName("EditOrder")]
public ActionResult EditOrderError(string code, string libelle)
{

    }

但是我得到了404因为脚本试图找到“EditOrderError”视图。

2 个答案:

答案 0 :(得分:2)

ASP.NET MVC不允许您overload controller actions ,除非他们handle different HTTP verbs

假设您正在使用C#4,一种可能的解决方法(虽然不是很好)是在单个控制器操作上使用可选参数:

public ActionResult EditOrder(string nordre = null, string code = null, string libelle = null)
{
    if (nordre != null)
    {
        // ...
    }
    else if (code != null && libelle != null)
    {
        // ...
    }
    else
    {
        return new EmptyResult();
    }
}

答案 1 :(得分:1)

您不能使用相同的HTTP方法/动词(GET / POST / etc)

重载控制器操作

如果我需要控制器操作来使用.NET在标识符中不允许的字符,我只会使用ActionNameAttribute。喜欢使用破折号(/ controller / create-user)。 Like this one.