手机版

ASP .NET MVC实现多个按钮提交的方法

时间:2021-09-07 来源:互联网 编辑:宝哥软件园 浏览:

有时候会遇到这种情况:在一个表单上需要多个按钮来完成不同的功能,比如一个简单的审批功能。

如果是用webform那不需要讨论,但ASP。网最有价值球员中一个表单只能提交到一个行动处理,相对比较麻烦点。

方法一:使用客户端脚本

比如我们在视角中这样写:

inputtype='submit'value='审核通过onclick=' this。形式。操作=' %=URl .操作(“操作1”)%/输入类型=“提交”值=”审核不通过onclick=' this。形式。操作=' %=URl .操作(“操作2”)%/输入类型=“提交”值=”返回onclick=' this。形式。操作=' %=URl .操作(' Action3')%' /在点击提交按钮时,先改变形式的行为属性,使表单提交到按钮相应的行为处理。

但有的时候,可能行动一和2的逻辑非常类似,也许只是将某个字段的值置为一或者0,那么分开到二个行为中又显得有点多余了。

方法二:在行动中判断通过哪个按钮提交

在视角中,我们不用任何客户端脚本处理,给每个提交按钮加好名字属性:

输入类型='提交'值='审核通过name=' action '/input type=' submit ' value='审核不通过name=' action '/input type=' submit ' value='返回name='action'/然后在控制器中判断:

公共操作结果索引(字符串操作/*其它参数*/) { if (action=='审核通过){ //} else if (action=='审核不通过){//} else { //} }几年前写白杨代码的时候经常用这样的方法…

视角变得简单的控制器复杂了。

太依赖说查看,会存在一些问题。假若哪天客户说按钮上的文字改为"通过审核",或者是做个多语言版的,那就麻烦了。

方法三:使用动作选择器

关于动作选择器的基本原理可以先看下这个邮政使用动作选择器控制行动的选择。

使用此方法,我们可以将控制器写成这样:

[httpset][多按钮('动作1 ')]公共动作结果动作1(){//返回View();}[httpset][多按钮('操作2 ')]公共操作结果操作2(){//返回View();}在视角中:

输入类型='提交'值='审核通过名称='操作1 '/输入类型='提交'值='审核不通过name=' action 2 '/input type=' submit ' value='返回name='action3'/此时控制器已经无须依赖于按钮的价值值。

多按钮属性的定义如下:

公共类多按钮属性: actionnameselectorattribute {公共字符串名称{获取设置;}公共多按钮属性(字符串名称){这个.Name=name}公共重写bool是有效名称(控制器上下文控制器上下文,字符串操作名称,系统).反射。MethodInfo methodInfo) { if(字符串IsNullOrEmpty(这名称){ }返回false}返回控制器上下文.包含此。名称);}}方法四:改进

控制器:

[httpset][多按钮(名称='删除',参数=' id ')]公共操作结果删除(字符串id) { var响应=系统.网络。httpcontext。当前。回应;回应。写操作(“id”调用了删除操作);返回视图();} View:

输入类型='提交'值='不重要'名称='删除'/输入类型='提交'值='不重要'名称='删除: id /多按钮属性定义:

代码

[属性用法(属性目标。方法,AllowMultiple=false,Inherited=true)]公共类多按钮属性:操作名称选择属性{公共字符串名称{获取设置;}公共字符串参数{获取设置;}公共重写bool是有效名称(controller context controller context,string actionName,method info method info){ var key=button key from(controller context);var keyIsValid=IsValid(密钥);if(key is valid){ UpdateValueProviderIn(controllerContext,值来自(key));}返回keyIsValid }私有字符串控制器上下文控制器上下文){ var keys=控制器上下文.http上下文。请求。参数。所有钥匙;归还钥匙first or default(key startswithbuttonname);}私有静态bool IsValid(字符串键){返回键!=null}私有静态字符串值来自(字符串键){ var parts=key .拆分(' : '。ToCharArray());退回零件。长度2?null :部分[1];} private void UpdateValueProviderIn(ControllerContext ControllerContext,string value) { if (string .IsNullOrEmpty(参数))返回;控制器上下文.控制器。值提供程序[参数]=新值提供程序结果(值,值,空值);}私有bool键开始开关按钮名称(字符串键){返回键。开始于(名称,字符串比较。不变量cultureignorecase);} } //如果是在MVC 2.0中的话,将UpdateValueProviderIn方法改为:private void UpdateValueProviderIn(ControllerContext ControllerContext,字符串值){ if(字符串.IsNullOrEmpty(参数))返回;控制器上下文.路由数据。值[这个。参数]=值;} 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

版权声明:ASP .NET MVC实现多个按钮提交的方法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。