首先在项目的“Controllers”文件夹下添加一个控制器UserController,在UserController中定义三个名称均为“RetakePassword”的Action,代码分别如下所示:
public ActionResult RetakePassword() { return View(); }
[HttpPost] public ActionResult RetakePassword(string e, string u, string a) { ………… }
[HttpPost] public ActionResult RetakePassword(Users user, string aid) { ………… }
然后在RetakePassword Action相对应的View中使用form表单提交数据,form表单的代码为:
<form id="applysubmit" method="post" action="@Url.Content("~/user/RetakePassword")">
…………
</form>
提交表单之后,浏览器提示如下错误:
The current request for action 'RetakePassword' on controller type 'UserController' is ambiguous between the following action methods:
出现这种错误是因为form表单action属性指定的Action有歧义,浏览器不清楚把表单数据发送到哪个 Action。
这个问题能够使用过滤器解决吗,如果可以的话,请问怎样写过滤器,才能让form表单提交到正确的Action呢?谢谢。
最容易的做法就是你这2个post的action名字不同(可以通过修改action method的签名或者用ActionNameAttribute来标记),名字不同不会有什么问题。如果你一定要用同样的名字的话,必须使用ActionMethodSelectorAttribute,重写它的IsValidForRequest方法,然后在里面实现区分逻辑(例如检查提交的表单里有哪些name),用来帮助mvc框架找到那个唯一的正确的action。你所看到的HttpGetAttribute, HttpPostAttribute其实也是继承了ActionMethodSelectorAttribute并重写了里面的方法。