在ASP.NET MVC框架中,如何处理多个提交按钮?

内容来自 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页面似乎提供了与上述相同的功能,对于新开发来说可能更可取。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值