我们可以在视图中有多个提交按钮用于不同的操作吗?

时间:2012-11-12 06:56:29

标签: asp.net-mvc razor

我有4个提交按钮来执行不同的操作操作。对于One Submit,我写得像这样

@using (Html.BeginForm("Edit", "Seller", FormMethod.Post)){ 

}

我们如何处理多个提交按钮?我们是否需要为每个提交按钮编写相同的内容?

2 个答案:

答案 0 :(得分:3)

Here是你如何为两个提交按钮做的,类似你可以为'n'提交按钮执行此操作。

下面是一个带有两个提交按钮的表单。请注意,这两个提交按钮具有相同的名称,即“submitButton”

@Html.BeginForm("MyAction", "MyController"); %>
<input type="submit" name="submitButton" value="Button1" />
<input type="submit" name="submitButton" value="Button2" />
}

现在转到Controller,Action接受一个名为string stringButton的输入参数,其余的都是不言自明的。

public ActionResult MyAction(string submitButton) {
        switch(submitButton) {
            case "Button1":
               // do something here
            case "Button2":
               // do some other thing here
            default:
                // add some other behaviour here
        }
...
}

答案 1 :(得分:0)

我在这个用例中使用MultiButtonAttribute。很好很清楚。您可以将逻辑分成不同的操作方法。

<强> MulitButtonAttribute

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class MultiButtonAttribute : ActionNameSelectorAttribute
{
    public MultiButtonAttribute(string matchFormKey) : this(matchFormKey, null) {
    }

    public MultiButtonAttribute(string matchFormKey, string matchFormValue) {
        this.MatchFormKey = matchFormKey;
        this.MatchFormValue = matchFormValue;
    }

    public string MatchFormKey { get; set; }
    public string MatchFormValue { get; set; }

    public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo)
    {
        string value = controllerContext.HttpContext.Request[MatchFormKey];
        return value != null && (value == MatchFormValue || MatchFormValue == null);
    }
}

在控制器中

[HttpPost]
[MultiButton("buttonPreviousPage")]
public ActionResult NavigateToPreviousPage(int currentPageIndex)
{
// .. action logic
}

在视图中

@using (Html.BeginForm("SomeDefaultAction", "MyController", FormMethod.Post)){ 
    <input type="submit" id="buttonPreviousPage" name="buttonPreviousPage" value="Previous" />
    <input type="submit" id="buttonNextPage" name="buttonNextPage" value="Next" />
}

工作原理

MultiButtonAttribute扩展ActionNameSelectorAttribute非常重要。当MVC选择正确的方法来匹配路由时,它将在方法上找到这样的属性,它将在传递IsValidName的属性上调用方法ControllerContext。比它正在查看键(按钮名称)是否处于POSTed形式,没有空值(或最终你可以定义键的预期值(按钮),但没有必要)。

在MVC 2中运行得很好(但我希望它适用于更高版本)。另一个优点是您可以本地化按钮的值。