仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 645|回复: 8
打印 上一主题 下一主题

[学习教程] ASP.NET网页设计ASP.NET教程:网页表单多个按钮完成分歧...

[复制链接]
逍遥一派 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:21:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
有理由相信是能提供更出色的性能。很多平台无法支持复杂的编译器,因此需要二次编译来减少本地编译器的复杂度。当然可能做不到java编译器那么简易。</p>偶然候会碰到这类情形:在一个表单上必要多个按钮来完成分歧的功效,好比一个复杂的审批功效。



假如是用webform那不必要会商,但asp.netmvc中一个表单只能提交到一个Action处置,绝对对照贫苦点。
办法一:利用客户端剧本
好比我们在View中如许写:
以下为援用的内容:
<inputtype="submit"value="考核经由过程"/>

在点击提交按钮时,先改动Form的action属性,使表单提交到按钮响应的action处置。
但有的时分,大概Action1和2的逻辑十分相似,大概只是将某个字段的值置为1大概0,那末分隔到二个action中又显得有点过剩了。
办法二:在Action中判别经由过程哪一个按钮提交
在View中,我们不必任何客户端剧本处置,给每一个提交按钮加好name属性:
以下为援用的内容:
<inputtype="submit"value="考核经由过程"name="action"/>
<inputtype="submit"value="考核欠亨过"name="action"/>
<inputtype="submit"value="前往"name="action"/>

然后在把持器中判别:
以下为援用的内容:
[HttpPost]
publicActionResultIndex(stringaction/*别的参数*/)
{
if(action=="考核经由过程")
{
//
}
elseif(action=="考核欠亨过")
{
//
}
else
{
//
}
}

几年前写asp代码的时分常常用如许的办法…
View变得复杂的,Controller庞大了。
太依附说View,会存在一些成绩。倘使哪天客户说按钮上的笔墨改成“经由过程考核”,大概是做个多言语版的,那就贫苦了。
参考:http://www.ervinter.com/2009/09/25/asp-net-mvc-how-to-have-multiple-submit-button-in-form/
办法三:利用ActionSelector
关于ActionSelector的基础道理能够先看下这个POST利用ActionSelector把持Action的选择。
利用此办法,我们能够将把持器写成如许:
以下为援用的内容:
[HttpPost]
[MultiButton("action1")]
publicActionResultAction1()
{
//
returnView();
}
[HttpPost]
[MultiButton("action2")]
publicActionResultAction2()
{
//
returnView();
}

在View中:
以下为援用的内容:
<inputtype="submit"value="考核经由过程"name="action1"/>
<inputtype="submit"value="考核欠亨过"name="action2"/>
<inputtype="submit"value="前往"name="action3"/>

此时,Controller已不必依附于按钮的Value值。
MultiButtonAttribute的界说以下:
以下为援用的内容:
publicclassMultiButtonAttribute:ActionNameSelectorAttribute
{
publicstringName{get;set;}
publicMultiButtonAttribute(stringname)
{
this.Name=name;
}
publicoverrideboolIsValidName(ControllerContextcontrollerContext,
stringactionName,System.Reflection.MethodInfomethodInfo)
{
if(string.IsNullOrEmpty(this.Name))
{
returnfalse;
}
returncontrollerContext.HttpContext.Request.Form.AllKeys.Contains(this.Name);
}
}

参考:http://blog.maartenballiauw.be/post/2009/11/26/Supporting-multiple-submit-buttons-on-an-ASPNET-MVC-view.aspx
办法4、改善
ThomasEyde就办法三的计划给出了个改善版:
Controller:
以下为援用的内容:
[HttpPost]
[MultiButton(Name="delete",Argument="id")]
publicActionResultDelete(stringid)
{
varresponse=System.Web.HttpContext.Current.Response;
response.Write("Deleteactionwasinvokedwith"+id);
returnView();
}

View:
以下为援用的内容:
<inputtype="submit"value="notimportant"name="delete"/>
<inputtype="submit"value="notimportant"name="delete:id"/>

MultiButtonAttribute界说:
以下为援用的内容:
[AttributeUsage(AttributeTargets.Method,AllowMultiple=false,Inherited=true)]
publicclassMultiButtonAttribute:ActionNameSelectorAttribute
{
publicstringName{get;set;}
publicstringArgument{get;set;}
publicoverrideboolIsValidName(ControllerContextcontrollerContext,stringactionName,MethodInfomethodInfo)
{
varkey=ButtonKeyFrom(controllerContext);
varkeyIsValid=IsValid(key);
if(keyIsValid)
{
UpdateValueProviderIn(controllerContext,ValueFrom(key));
}
returnkeyIsValid;
}
privatestringButtonKeyFrom(ControllerContextcontrollerContext)
{
varkeys=controllerContext.HttpContext.Request.Params.AllKeys;
returnkeys.FirstOrDefault(KeyStartsWithButtonName);
}
privatestaticboolIsValid(stringkey)
{
returnkey!=null;
}
privatestaticstringValueFrom(stringkey)
{
varparts=key.Split(":".ToCharArray());
returnparts.Length<2?null:parts[1];
}
privatevoidUpdateValueProviderIn(ControllerContextcontrollerContext,stringvalue)
{
if(string.IsNullOrEmpty(Argument))return;
controllerContext.Controller.ValueProvider[Argument]=newValueProviderResult(value,value,null);
}
privateboolKeyStartsWithButtonName(stringkey)
{
returnkey.StartsWith(Name,StringComparison.InvariantCultureIgnoreCase);
}
}

假如是在MVC2.0中的话,将UpdateValueProviderIn办法改成:
以下为援用的内容:
privatevoidUpdateValueProviderIn(ControllerContextcontrollerContext,stringvalue)
{
if(string.IsNullOrEmpty(Argument))
return;
controllerContext.RouteData.Values[this.Argument]=value;
}

原文地点:http://www.ckuyun.com/wuchang/archive/2010/01/29/1658916.html
我有个同学,他是搞Java的,他给我说“Java不是效率低,而是速度慢。”,我不是搞Java的,我实在想不透这句话的含义,难道执行速度不就是效率低吗?难道执行速度慢还成效率高了?
只想知道 该用户已被删除
沙发
发表于 2015-1-19 09:13:52 | 只看该作者
JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。
乐观 该用户已被删除
板凳
发表于 2015-1-24 12:39:10 | 只看该作者
业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。
若天明 该用户已被删除
地板
发表于 2015-2-1 12:10:26 | 只看该作者
众所周知,Windows以易用而出名,也因此占据不少的服务器市场。
深爱那片海 该用户已被删除
5#
发表于 2015-2-7 05:19:39 | 只看该作者
ASP是把代码交给VBScript解释器或Jscript解释器来解释,当然速度没有编译过的程序快了。
变相怪杰 该用户已被删除
6#
发表于 2015-2-20 17:54:20 | 只看该作者
众所周知,Windows以易用而出名,也因此占据不少的服务器市场。
小妖女 该用户已被删除
7#
发表于 2015-3-6 18:42:01 | 只看该作者
逐步缩小出错代码段的范围,最终确定错误代码的位置。
再现理想 该用户已被删除
8#
发表于 2015-3-13 05:46:58 | 只看该作者
是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。
海妖 该用户已被删除
9#
发表于 2015-3-20 14:31:04 | 只看该作者
ASP.NET可以无缝地与WYSIWYGHTML编辑器和其他编程工具(包括MicrosoftVisualStudio.NET)一起工作。这不仅使得Web开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到Web页的GUI和完全集成的调试支持。微软为ASP.net设计了这样一些策略:易于写出结构清晰的代码、代码易于重用和共享、可用编译类语言编写等等,目的是让程序员更容易开发出Web应用,满足计算向Web转移的战略需要。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-21 11:26

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表