我有 4 个提交按钮来执行不同的操作操作。对于一次提交,我这样写
@using (Html.BeginForm("Edit", "Seller", FormMethod.Post)){
}
我们如何处理多个提交按钮?我们需要为每个提交按钮写相同的内容吗?
我有 4 个提交按钮来执行不同的操作操作。对于一次提交,我这样写
@using (Html.BeginForm("Edit", "Seller", FormMethod.Post)){
}
我们如何处理多个提交按钮?我们需要为每个提交按钮写相同的内容吗?
以下是您如何为两个提交按钮执行此操作,类似地您可以为“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
}
...
}
我在这个用例中使用 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 中运行良好(但我希望它适用于以后的版本)。另一个优点是您可以本地化按钮的值。