首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >你如何处理ASP.NET MVC框架中的多个提交按钮?

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

提问于 2017-12-14 05:20:32
回答 2关注 0查看 457

是否有一些简单的方法来处理同一个表单中的多个提交按钮?例:

代码语言:txt
AI代码解释
复制
<% Html.BeginForm("MyAction", "MyController", FormMethod.Post); %>
代码语言:txt
AI代码解释
复制
<input type="submit" value="Send" />
代码语言:txt
AI代码解释
复制
<input type="submit" value="Cancel" />
代码语言:txt
AI代码解释
复制
<% Html.EndForm(); %>

任何想法如何在ASP.NET Framework Beta中做到这一点?我所搜索的所有例子都有单个按钮

回答 2

心愿

发布于 2017-12-14 05:23:52

给你的提交按钮起一个名字,然后检查你的控制器方法提交的值:

代码语言:txt
AI代码解释
复制
<% Html.BeginForm("MyAction", "MyController", FormMethod.Post); %>
代码语言:txt
AI代码解释
复制
<input type="submit" name="submitButton" value="Send" />
代码语言:txt
AI代码解释
复制
<input type="submit" name="submitButton" value="Cancel" />
代码语言:txt
AI代码解释
复制
<% Html.EndForm(); %>

粘贴到

代码语言:txt
AI代码解释
复制
public class MyController : Controller {
代码语言:txt
AI代码解释
复制
    public ActionResult MyAction(string submitButton) {
代码语言:txt
AI代码解释
复制
        switch(submitButton) {
代码语言:txt
AI代码解释
复制
            case "Send":
代码语言:txt
AI代码解释
复制
                // delegate sending to another controller action
代码语言:txt
AI代码解释
复制
                return(Send());
代码语言:txt
AI代码解释
复制
            case "Cancel":
代码语言:txt
AI代码解释
复制
                // call another action to perform the cancellation
代码语言:txt
AI代码解释
复制
                return(Cancel());
代码语言:txt
AI代码解释
复制
            default:
代码语言:txt
AI代码解释
复制
                // If they've submitted the form without a submitButton, 
代码语言:txt
AI代码解释
复制
                // just return the view again.
代码语言:txt
AI代码解释
复制
                return(View());
代码语言:txt
AI代码解释
复制
        }
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
    private ActionResult Cancel() {
代码语言:txt
AI代码解释
复制
        // process the cancellation request here.
代码语言:txt
AI代码解释
复制
        return(View("Cancelled"));
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
    private ActionResult Send() {
代码语言:txt
AI代码解释
复制
        // perform the actual send operation here.
代码语言:txt
AI代码解释
复制
        return(View("SendConfirmed"));
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
}

编辑:

为了扩展这种方法来处理本地化的网站,在别的地方隔离你的消息(比如编译一个资源文件到一个强类型的资源类)

然后修改代码,使其如下工作:

代码语言:txt
AI代码解释
复制
<% Html.BeginForm("MyAction", "MyController", FormMethod.Post); %>
代码语言:txt
AI代码解释
复制
<input type="submit" name="submitButton" value="<%= Html.Encode(Resources.Messages.Send)%>" />
代码语言:txt
AI代码解释
复制
<input type="submit" name="submitButton" value="<%=Html.Encode(Resources.Messages.Cancel)%>" />
代码语言:txt
AI代码解释
复制
<% Html.EndForm(); %>

你的控制器应该是这样的:

代码语言:txt
AI代码解释
复制
// Note that the localized resources aren't constants, so 
代码语言:txt
AI代码解释
复制
// we can't use a switch statement.
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
if (submitButton == Resources.Messages.Send) { 
代码语言:txt
AI代码解释
复制
    // delegate sending to another controller action
代码语言:txt
AI代码解释
复制
    return(Send());
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
} else if (submitButton == Resources.Messages.Cancel) {
代码语言:txt
AI代码解释
复制
     // call another action to perform the cancellation
代码语言:txt
AI代码解释
复制
     return(Cancel());
代码语言:txt
AI代码解释
复制
}

秋之夕颜清

发布于 2017-12-14 05:23:01

这是一个基本多重提交按钮问题的属性的解决方案的

代码语言:txt
AI代码解释
复制
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
代码语言:txt
AI代码解释
复制
public class MultipleButtonAttribute : ActionNameSelectorAttribute
代码语言:txt
AI代码解释
复制
{
代码语言:txt
AI代码解释
复制
    public string Name { get; set; }
代码语言:txt
AI代码解释
复制
    public string Argument { get; set; }
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
    public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo)
代码语言:txt
AI代码解释
复制
    {
代码语言:txt
AI代码解释
复制
        var isValidName = false;
代码语言:txt
AI代码解释
复制
        var keyValue = string.Format("{0}:{1}", Name, Argument);
代码语言:txt
AI代码解释
复制
        var value = controllerContext.Controller.ValueProvider.GetValue(keyValue);
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
        if (value != null)
代码语言:txt
AI代码解释
复制
        {
代码语言:txt
AI代码解释
复制
            controllerContext.Controller.ControllerContext.RouteData.Values[Name] = Argument;
代码语言:txt
AI代码解释
复制
            isValidName = true;
代码语言:txt
AI代码解释
复制
        }
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
        return isValidName;
代码语言:txt
AI代码解释
复制
    }
代码语言:txt
AI代码解释
复制
}

razor:

代码语言:txt
AI代码解释
复制
<form action="" method="post">
代码语言:txt
AI代码解释
复制
 <input type="submit" value="Save" name="action:Save" />
代码语言:txt
AI代码解释
复制
 <input type="submit" value="Cancel" name="action:Cancel" />
代码语言:txt
AI代码解释
复制
</form>

控制器:

代码语言:txt
AI代码解释
复制
[HttpPost]
代码语言:txt
AI代码解释
复制
[MultipleButton(Name = "action", Argument = "Save")]
代码语言:txt
AI代码解释
复制
public ActionResult Save(MessageModel mm) { ... }

代码语言:txt
AI代码解释
复制
[HttpPost]
代码语言:txt
AI代码解释
复制
[MultipleButton(Name = "action", Argument = "Cancel")]
代码语言:txt
AI代码解释
复制
public ActionResult Cancel(MessageModel mm) { ... }

PS、: Razor页面看起来提供了相同的功能。对于新的发展,这可能是更好的。

和开发者交流更多问题细节吧,去 写回答
相关文章
Asp.Net Mvc表单提交(批量提交)
Asp.Net Mvc中Action的参数可以自动接收和反序列化form表单的值,
yaphetsfang
2020/07/30
3.1K0
在ASP.NET MVC中如何应用多个相同类型的ValidationAttribute?
ASP.NET MVC采用System.ComponentModel.DataAnnotations提供的元数据验证机制对Model实施验证,我们可以在Model类型或者字段/属性上应用相应的ValidationAttribute。但是在默认情况下,对于同一个类型的ValidationAttribute特性只允许一个应用到目标元素上——即使我们将AllowMultiple属性设置为True。这篇文章的目的就是为了解决这个问题。[源代码从这里下载] 一、一个自定义ValidationAttribute:Ran
蒋金楠
2018/02/07
2.1K0
在ASP.NET MVC中如何应用多个相同类型的ValidationAttribute?
重复提交,你是如何处理的?
今天早上,新来的同事小王突然问我:“周哥,什么是幂等性啊?”。然后我就跟他解释了一番,幂等性就是说无论你执行几次请求,其结果是一样的。说到了幂等就不得不说重复提交了,你连续点击提交按钮,理论上来说这是同一条数据,数据库应该只能存入一条,而实际上存放了多条,这就违反了幂等性。因此我们就需要做一些处理,来保证连续点击提交按钮后,数据库只能存入一条数据。
Java旅途
2020/07/16
1.1K0
重复提交,你是如何处理的?
今天早上,新来的同事小王突然问我:“周哥,什么是幂等性啊?”。然后我就跟他解释了一番,幂等性就是说无论你执行几次请求,其结果是一样的。说到了幂等就不得不说重复提交了,你连续点击提交按钮,理论上来说这是同一条数据,数据库应该只能存入一条,而实际上存放了多条,这就违反了幂等性。因此我们就需要做一些处理,来保证连续点击提交按钮后,数据库只能存入一条数据。
Java旅途
2020/06/25
1.1K0
[转自Scott]ASP.NET MVC框架(第四部分): 处理表单编辑和提交场景
英文原文地址:http://weblogs.asp.net/scottgu/archive/2007/12/09/asp-net-mvc-framework-part-4-handling-form-edit-and-post-scenarios.aspx 翻译原文地址:http://blog.joycode.com/scottgu/archive/2007/12/10/112465.aspx 过去的几个星期内,我一直在写着讨论我们正在开发的新ASP.NET MVC框架的系列贴子。ASP.NET MVC框
菩提树下的杨过
2018/01/22
5.2K0
[转自Scott]ASP.NET MVC框架(第四部分): 处理表单编辑和提交场景
Asp.net MVC Jquery提交后乱码问题
最近在处理MVC时,遇到要将特殊字符,或者XML格式的数据传递到后台,但是后台解析发现无法识别,处理有误。
aehyok
2018/09/11
1.6K0
flask 一个页面多个提交按钮(flask 23)
class NewPostForm(FlaskForm): title = StringField('Title', validators=[DataRequired(), Length(1, 50)]) body = TextAreaField('Body', validators=[DataRequired()]) save = SubmitField('Save') publish = SubmitField('Publish')
用户5760343
2019/08/13
3.2K0
ASP.NET MVC中的ActionFilter是如何执行的?
在ASP.NET MVC中的四大筛选器(Filter),ActionFilter直接应用在某个Action方法上,它在目标Action方法执行前后对调用进行拦截以执行一些额外的操作。这是一种典型的AO
蒋金楠
2018/01/15
1.6K0
ASP.NET MVC中的ActionFilter是如何执行的?
ASP.NET MVC是如何运行的[1]: 建立在“伪”MVC框架上的Web应用
ASP.NET由于采用了管道式设计,具有很好的扩展性,而整个ASP.NET MVC应用框架就是通过扩展ASP.NET实现的。通过上面对ASP.NET管道设计的介绍,我们知道ASP.NET的扩展点只要体现在HttpMoudle和HttpHandler这两个核心组建之上,实际上整个ASP.NET MVC框架就是通过自定义的HttpMoudle(UrlRoutingModule)和HttpHandler(MvcHandler)实现的。为了上读者从整体上把握ASP.NET MVC的工作机制,接下来我按照其原理通过一
蒋金楠
2018/02/07
1.3K0
ASP.NET MVC是如何运行的[1]: 建立在“伪”MVC框架上的Web应用
如何在多个项目中分离Asp.Net Core Mvc的Controller和Areas
软件系统中总是希望做到松耦合,项目的组织形式也是一样,本篇文章将介绍在ASP.NET CORE MVC中怎么样将Controller与主网站项目进行分离,并且对Areas进行支持。
yoyofx
2018/09/05
2.2K0
ASP.Net MVC框架配置与分析
前几年的时候ASP.Net就有MVC的概念,实际上就是我们熟悉的WebForm开发模型。 1、Model层与视图无关,并且只与数据库相关: 伪代码: pulic class Model {       pulic DataSet ds()       {             //数据库库取数据             return ds;       } } 2、Controller实际上就是我们熟悉的Default.aspx.cs文件,继承自System.Web.UI.Page 类的文件 3、Vie
菩提树下的杨过
2018/01/22
1.5K0
ASP.Net MVC框架配置与分析
asp.net mvc中的路径选择
MVC的路径选择十分灵活,可以用类似/parm1/parm2/parm3/ 的方式(这个有点象iis的urlrewriter),也可以象传统url那样用/?parm1=a&parm2=b&parm3=
菩提树下的杨过
2018/01/22
2K0
ASP.NET MVC是如何运行的
ASP.NET由于采用了管道式设计,所以具有很好的扩展性,整个ASP.NETMVC应用框架就是通过扩展ASP.NET实现的。通过上面对ASP.NET管道设计的介绍我们知道,ASP.NET的扩展点主要体现在 HttpModule和 HttpHandler这两个核心组件之上,整个ASP.NET MVC 框架就是通过自定义的 HttpModule和 HttpHandler建立起来的。 为了使读者能够从整体上把握ASP.NETMVC框架的工作机制,接下来我们按照其原理通过一些自定义组件来模拟ASP.NET MVC的运行原理,也可以将此视为一个“迷你版”的ASP.NET MVC。值得一提的是,为了让读者根据该实例从真正的ASP.NETMVC中找到对应的类型,本例完全采用了与ASP.NETMVC一致的类型命名方式。
全栈程序员站长
2022/09/15
9600
集成EntLib实现ASP.NET MVC的异常处理
本篇通过自定义ASP.NET MVC的异常筛选器实现了与EntLib的EHAB(Exception Handling Application Block)的集成,使我们可以通过配置的方式来定义异常处理策略,并最终通过错误页面显示被处理过的异常信息。[源代码从这里下载] 我们知道ASP.NET MVC具有一个类型为HandleErrorAttribute的异常筛选器可以起到错误页面的导向作用。在这里我直接让我们自定义的异常筛选器继承它,为此我们定义了如下一个名称为ExtendedHandleErrorAttr
蒋金楠
2018/01/15
6920
集成EntLib实现ASP.NET MVC的异常处理
七天学会ASP.NET MVC (三)——ASP.Net MVC 数据处理
第三天我们将学习Asp.Net中数据处理功能,了解数据访问层,EF,以及EF中常用的代码实现方式,创建数据访问层和数据入口,处理Post数据,以及数据验证等功能。 系列文章 七天学会ASP.NET M
葡萄城控件
2018/01/10
5.3K0
七天学会ASP.NET MVC (三)——ASP.Net MVC 数据处理
【nodejs】让nodejs像后端mvc框架(asp.net mvc)一样处理请求--目录(8/8 完结)
为什么要做这个 在使用nodejs开发过程中,总是发现需要做很多重复性的体力劳动,且因为自身是服务端程序员出身,感觉有一些服务端好的东西其实可以在nodejs上得到应用并能提高一些开发工作效率。 本系列文章将介绍对express框架的一些扩展,来达到部分后台框架一样的特性功能。如自动路由,路由映射,参数映射等等功能; 代码基本上都是用typescript写的,因为他有比较好的语法检查,以及最重要的智能提示!!!实在是烦透了方法名、类名要么自己手动敲,要么各种copy。累到嗝屁! 目录 【nodej
旺财的城堡
2018/11/20
1.1K0
集成EntLib实现ASP.NET MVC的异常处理[续篇]
在《集成EntLib实现ASP.NET MVC的异常处理》我们实现采用EntLib的Exception Handling Application Block(EHAB)进行异常的处理,并导向指定的出错页面。在这篇文章中我们做一些改变,直接将处理过的异常消息显示在本页的ValidationSummary中。[源代码从这里下载] 一、扩展的Controller:ExtendedController 我们创建一个ExtendedController基类来实现基于EntLib的EHAB的异常处理。如下面的代码所是,
蒋金楠
2018/01/15
7330
集成EntLib实现ASP.NET MVC的异常处理[续篇]
ASP.NET MVC 3中ViewBa
ViewBag, ViewData十分类似,都可用于把数据从controller传递到view。
py3study
2020/01/06
9250
ASP.NET MVC 3中ViewBa
asp.net mvc 简单项目框架的搭建(二)—— Spring.Net在Mvc中的简单应用
摘要:上篇写了如何搭建一个简单项目框架的上部分,讲了关于Dal和Bll之间解耦的相关知识,这篇来把后i面的部分说一说。
CherishTheYouth
2019/09/11
1.3K0
asp.net mvc 简单项目框架的搭建(二)—— Spring.Net在Mvc中的简单应用
ASP.NET MVC 框架结构图
    最近在学ASP.NET MVC,画了一些图,和大伙分享下: Routing 组件 图1 独立的ASP.NET Routing组件 MVC-Controller 图2 Controller结构
用户1172223
2018/01/29
1.8K0
ASP.NET MVC 框架结构图

相似问题

如何防止按钮提交表单?

2388

html 表单如何提交至spring mvc controller?

2944

开发小程序,你会使用框架吗?

0209

如何使用片段中的XML onClick处理按钮点击?

0240

实体框架提交时,删除所有内容?

2304
相关问答用户
腾讯云TDP | TDP会员擅长3个领域
到家集团 | 技术VP擅长5个领域
腾讯云TDP | KOL擅长5个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文