我有4个提交按钮来执行不同的操作操作。对于One Submit,我写得像这样
@using (Html.BeginForm("Edit", "Seller", FormMethod.Post)){
}
我们如何处理多个提交按钮?我们是否需要为每个提交按钮编写相同的内容?
答案 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中运行得很好(但我希望它适用于更高版本)。另一个优点是您可以本地化按钮的值。