ASP.Net MVC - 提交具有相同值的按钮

时间:2009-12-28 17:19:56

标签: asp.net-mvc

我有一个包含多个提交按钮且具有相同值的表单。示例:“继续”。

现在,在ASP.Net MVC的post控制器方法中,我如何知道按下了哪个按钮?

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult DepartmentDetails(string submitButton)

submitButton的值将始终为“Proceed”。我如何知道按下了哪个按钮。

我为每个按钮分配了不同的ID。

感谢。

3 个答案:

答案 0 :(得分:4)

试试这个:

<% using (Html.BeginForm())
   { %>
   <input type="submit" value="Submit" name="Submit1Button" />
   <input type="submit" value="Submit" name="Submit2Button" />
<%} %>

public class HomeController : Controller
{

    public ActionResult Index()
    {
        return View();
    }

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Index(FormCollection values)
    {
        string buttonName = values.AllKeys.Where((n) => n.EndsWith("Button")).SingleOrDefault();
        return View();
    }

}

答案 1 :(得分:2)

将页面分成两种不同的形式会不会更有意义吗?

然后,您可以使用Html.BeginForm HtmlHelper方法的参数为每个表单指定不同的Controller(s)Action方法。

答案 2 :(得分:0)

我意识到这个问题很古老,但只是碰到了它,以为我会回答!

这就是我们使用的:

/// <summary>
/// Attribute for Controller methods to decide whether a particular button
/// was clicked and hence whether the method can handle the action.
/// </summary>
public class IfButtonClickedAttribute : ActionMethodSelectorAttribute
{
    private readonly IEnumerable<string> _buttonNames;

    public IfButtonClickedAttribute(params string[] buttonNames)
    {
        _buttonNames = buttonNames;
    }

    public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
    {
        if (controllerContext.HttpContext.Request.HttpMethod != "POST")
            return false;

        foreach (string buttonName in _buttonNames)
        {
            //this first test is for buttons or inputs that have the actual name specified
            if (controllerContext.HttpContext.Request.Form[buttonName] != null)
                return true;
        }

        return false;
    }
}

然后关于你的行动:

[ActionName("SaveItem"), IfButtonClicked("SaveAsDraft")]
public ActionResult SaveAsDraft(){ ... }

[ActionName("SaveItem"), IfButtonClicked("SaveAsPublished")]
public ActionResult SaveAsPublished(){ ... }