首页 > 编程语言 >在ASP.NET MVC框架中,如何处理多个提交按钮?

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

时间:2023-11-06 19:57:42浏览次数:61  
标签:ASP string Argument MVC 提交 按钮 NET public Name

内容来自 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

相关文章

  • javaWeb&springMVC
    Servlet1:servlet定义servlet是开发动态web的一门技术,通过servlet实现与用户的动态交互。2:使用方式(1)javaWeb中只需要继承HttpServlet接口,重写其中的doGet和doPost方法即可编写一个servlet;写好servlet程序后需要在web.xml文件中编写映射,相当于将我们缩写的servlet注册到web服务......
  • Metasploit windows 调试环境搭建
    Metasploitwindows调试环境搭建安装ruby首先确定metasploit的ruby版本metasploit-framework/.ruby-version3.0.5在https://rubyinstaller.org/downloads/archives/下载对应版本的Ruby+DevkitInstallers(x64),默认配置安装即可。输入ruby-v查看是否安装成功安装gem......
  • Metasploit渗透测试框架的基本使用
    一、Metasploit渗透测试框架介绍(1)基础库metasploit基础库文件位于源码根目录路径下的libraries目录中,包括Rex,framework-core和framework-base三部分。Rex是整个框架所依赖的最基础的一些组件,如包装的网络套接字、网络应用协议客户端与服务端实现、日志子系统、渗透攻击支持例......
  • ASP.NET窗体开发实现下载Excel表格数据
    使用Excel表格下载,还是要先下载NPOI插件,下载安装后,才能直接下载Excel表格。usingSystem;usingSystem.Collections.Generic;usingSystem.Data;usingSystem.IO;usingSystem.Linq;usingSystem.Web;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingEnglishPr......
  • .net core 到底行不行!超高稳定性和性能的客服系统:性能实测
    业余时间用.netcore写了一个升讯威在线客服系统。并在博客园写了一个系列的文章,介绍了这个开发过程。我把这款业余时间写的小系统丢在网上,陆续有人找我要私有化版本,我都给了,毕竟软件业的初衷就是免费和分享,后来我索性就官方发了一个私有化版直接给别人下载。现在可以在官网完......
  • Netflix 技术堆栈(CI/CD 管道)
    让我们探索Netflix世界一流的持续交付管道背后的工具和技术。*规划:NetflixEngineering使用JIRA进行项目规划,使用Confluence进行文档编制。*编码:Java是后端服务的主要语言。*在适当的情况下使用其他语言。*构建:Gradle是主要的构建工具。*自定义Gradle插件......
  • kubernetes最新版部署
    部署最新1.28.2-0版本kuberneteskubernetes集群规划主机名IP地址备注k8s-master1192.168.2.24master1k8s-master2192.168.2.25master2k8s-master3192.168.2.26master3k8s-master-lb192.168.2.36keepalived虚拟IPk8s-node1192.168.2.27node1k......
  • 论文阅读:Prototypical Networks for Few-shot Learning
    PrototypicalNetworksforFew-shotLearning摘要我们提出了原型网络,用于解决少样本分类问题,在这种情况下,分类器必须对训练集中未见的新类进行归纳,而每个新类只有少量的例子。原型网络学习一个度量空间,在这个空间中,可以通过计算与每个类别的原型表示的距离来进行分类。与最近的少......
  • Winform中使用Log4Net实现日志记录到文件并循环覆盖
    场景log4nethttps://logging.apache.org/log4net/TheApachelog4netlibraryisatooltohelptheprogrammeroutputlogstatementstoavarietyofoutputtargets.log4netisaportoftheexcellentApachelog4j™frameworktotheMicrosoft®.NETruntime.We......
  • SpringMVC 依赖
    <?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0ht......