ASP.NET MVC返回重载获取操作

时间:2015-02-20 18:06:42

标签: c# asp.net-mvc

我正在使用MVC 4,我有以下内容:

[HttpGet]
public ActionResult SomeForm(modelType model = null)
{
    if(model != null)
       return View(model);
    return View(getModelFromSomewhere());
}

[HttpPost]
public ActionResult SomeForm(modelType model)
{
    if(isValid())
        doSomething();
    else
        return SomeForm(model) // Line in Question
}

然而,显然,我在“问题线”中遇到了模糊的方法错误。我想知道是否有人有一个优雅的解决方案,能够指定具体返回同名的[Get]方法?

谢谢!

3 个答案:

答案 0 :(得分:2)

您不能拥有与您已经指出的签名相同的方法。在C#中,它还意味着您无法通过返回类型区分函数 - 因此,如果参数相同,则必须使用不同的名称(在匹配签名时再次忽略默认值)。

如果你想要单独的GET和POST处理程序 - 使用不同的方法名称和ActionNameAttribute来命名行动:

[HttpGet]
[AciontName("SomeForm")]
public ActionResult SomeFormGet(modelType model = null) ...

[HttpPost]
[AciontName("SomeForm")]
public ActionResult SomeFormPost(modelType model) ...

答案 1 :(得分:0)

让它编译......

[HttpPost]
public ActionResult SomeForm(modelType model, FormCollection fc)
{
    if(isValid())
        doSomething();
    else
        return SomeForm(model) // Line in Question
}

答案 2 :(得分:0)

如果您正在使用http get方法,那么您正在等待浏览器将序列化模型作为字符串查询发送给您。例如,您正在等待

等网址
http://example.com?name=Andrew&type=Worker&field1=param1&field2=param2&....

通常的做法是在id方法中仅使用get,因此您可以这样做:

[HttpGet]
public ActionResult SomeForm(int id)
{
    var model = FindModelById(id);
    if(model != null)
       return View(model);
    return View(getModelFromSomewhere());
}

如果您正在寻找一个优雅的解决方案,它将更加优雅的架构