首页 新闻 搜索 专区 学院

请问:在MVC项目中怎样编写过滤器,以区分不同的Action?

0
悬赏园豆:10 [已解决问题] 解决于 2013-04-27 11:40

  首先在项目的“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呢?谢谢。

sikla的主页 sikla | 初学一级 | 园豆:27
提问于:2013-04-25 18:07
< >
分享
最佳答案
0

最容易的做法就是你这2个post的action名字不同(可以通过修改action method的签名或者用ActionNameAttribute来标记),名字不同不会有什么问题。如果你一定要用同样的名字的话,必须使用ActionMethodSelectorAttribute,重写它的IsValidForRequest方法,然后在里面实现区分逻辑(例如检查提交的表单里有哪些name),用来帮助mvc框架找到那个唯一的正确的action。你所看到的HttpGetAttribute, HttpPostAttribute其实也是继承了ActionMethodSelectorAttribute并重写了里面的方法。

收获园豆:10
水牛刀刀 | 大侠五级 |园豆:6350 | 2013-04-25 18:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册