我正在使用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]方法?
谢谢!
答案 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());
}
如果您正在寻找一个优雅的解决方案,它将更加优雅的架构