0

我有 4 个提交按钮来执行不同的操作操作。对于一次提交,我这样写

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

}

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

4

2 回答 2

3

以下是您如何为两个提交按钮执行此操作,类似地您可以为“n”提交按钮执行此操作。

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

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

现在转到控制器,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
        }
...
}
于 2012-11-12T07:09:56.490 回答
0

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

多按钮属性

[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 中运行良好(但我希望它适用于以后的版本)。另一个优点是您可以本地化按钮的值。

于 2012-11-13T22:48:35.200 回答