内容来自 DOC https://q.houxu6.top/?s=在ASP.NET MVC框架中,如何处理多个提交按钮?
在ASP.NET Framework Beta中,有几种方法可以处理同一表单中的多个提交按钮。
一种方法是使用一个隐藏字段来区分不同的提交按钮。例如:
<% Html.BeginForm("MyAction", "MyController", FormMethod.Post); %>
<input type="hidden" name="submitType" value="Send" />
<input type="submit" value="Send" />
<input type="hidden" name="submitType" value="Cancel" />
<input type="submit" value="Cancel" />
<% Html.EndForm(); %>
在后端代码中,您可以使用submitType
参数来确定哪个按钮被点击了。
public ActionResult MyAction(string submitType)
{
if (submitType == "Send")
{
// 处理发送按钮的点击事件
}
else if (submitType == "Cancel")
{
// 处理取消按钮的点击事件
}
...
}
另一种方法是使用JavaScript来处理多个提交按钮。您可以将每个按钮附加一个唯一的ID或类名,并在JavaScript中为每个按钮添加事件处理程序。例如:
<% Html.BeginForm("MyAction", "MyController", FormMethod.Post); %>
<input type="submit" id="sendButton" value="Send" />
<input type="submit" id="cancelButton" value="Cancel" />
<% Html.EndForm(); %>
<script>
document.getElementById("sendButton").addEventListener("click", function() {
// 处理发送按钮的点击事件
});
document.getElementById("cancelButton").addEventListener("click", function() {
// 处理取消按钮的点击事件
});
</script>
这是一个基于属性的、基本干净的多提交按钮解决方案,主要基于Maarten Balliauw的帖子和评论。
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class MultipleButtonAttribute : ActionNameSelectorAttribute
{
public string Name { get; set; }
public string Argument { get; set; }
public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo)
{
var isValidName = false;
var keyValue = string.Format("{0}:{1}", Name, Argument);
var value = controllerContext.Controller.ValueProvider.GetValue(keyValue);
if (value != null)
{
controllerContext.Controller.ControllerContext.RouteData.Values[Name] = Argument;
isValidName = true;
}
return isValidName;
}
}
Razor:
<form action="" method="post">
<input type="submit" value="Save" name="action:Save" />
<input type="submit" value="Cancel" name="action:Cancel" />
</form>
控制器:
[HttpPost]
[MultipleButton(Name = "action", Argument = "Save")]
public ActionResult Save(MessageModel mm) { ... }
[HttpPost]
[MultipleButton(Name = "action", Argument = "Cancel")]
public ActionResult Cancel(MessageModel mm) { ... }
更新: Razor页面似乎提供了与上述相同的功能,对于新开发来说可能更可取。
标签:ASP,string,Argument,MVC,提交,按钮,NET,public,Name From: https://www.cnblogs.com/xiaomandujia/p/17813562.html