使用MvcContrib的FormHelper

 MvcContrib的FormHelper提供了三大Helper

  1. Html辅助 
  2. 验证Helper
  3. Grid表格Helper

 下载

 下载后将MvcContrib.dll与MvcContrib.Samples.FormHelper.dll引用到Asp.net MVC工程

在Web.Config

pages.namespaces加入以下节点


                <add namespace="MvcContrib.UI.Tags"/>
                
<add namespace="System.Web.Mvc"/>
                
<add namespace="System.Linq"/>
                
<add namespace="MvcContrib.UI"/>
                
<add namespace="MvcContrib.UI.Html"/>
                
<add namespace="MvcContrib"/>

Html辅助Helper

这是一系列方便使用的HtmlHelper解决了一些常用的标签如果通过HtmlHelper生成不方便的问题。

Pv4的ViewData与Html.TextBox的名字对应绑定虽然已经提供了方便,但是比起MonoRail还略显不足,所以在MvcContrib中将这一智能方式又带了回来

如Controller中声明一对象

            Person person = new Person();
            person.Id 
= 1;
            person.Name 
= "Jeremy";
            person.RoleId 
= 2;
            person.Gender 
= Gender.Male;

            ViewData["person"= person;

则可以在View中使用以下Helper

<%= Html.Form().TextField("person.Name"%>

 这样就是直接绑定到person.Name了

或者

<%= Html.Form().TextArea("person.Name"new Hash(rows => 10, cols => 40)) %>

 当然,FormHelper提供了更多灵活的方式来设置标签的属性

  1. 可以使用Hash表

    <%= Html.Form().TextField("person.Name"new Hash(@class => "demo1")) %>

  2. 可以使用内置的强类型
    <%= Html.Form().TextField(new MvcContrib.UI.Tags.TextBox { Name = "person.Name", Class = "demo1" }) %>

 当然除了input-text和textarea外,其它标签也可以进行此类绑定

 

Hidden:
<%= Html.Form().HiddenField("person.Id"%>

CheckBox:
<%= Html.Form().CheckBoxField("person.IsDeveloper"%>
<%= Html.Form().CheckBoxList("accessLevel", ViewData["roles"], "Name""Id"%>
<%= Html.Form().CheckBoxList("accessLevel2", ViewData["roles"], "Name""Id").ToFormattedString("{0}<br />"%>这种设置输出格式的方法非常方便
甚至可以用迭代器输出
<% foreach(var checkbox in Html.Form().CheckBoxList("accessLevel3", ViewData["roles"], "Name""Id")) { %>
        
<% if(checkbox.Value.Equals("2")) { checkbox.Checked = true; }%>    
        
<%= checkbox %>
    
<% } %>    

Radio:
<%= Html.Form().RadioField("person.IsDeveloper"truenew Hash(label => "")) %>
<%= Html.Form().RadioField("person.IsDeveloper"falsenew Hash(label => "")) %>
(设置Label内容也是如此方便)

Select:
<%= Html.Form().Select("person.RoleId", ViewData["roles"], "Name""Id"new Hash(firstOption => "Please select")) %>
可以轻松地实现首选项的设置及绑定
更方便的是可以直接绑定一个Enum
<%= Html.Form().Select<Gender>("person.Gender"%>
对于多选也很方便,只是看起来代码有点多
<%= Html.Form().Select("listbox1", ViewData["roles"], "Name""Id"new Hash(size => 5, multiple => true, selectedValue => new[] { 12 } )) %>

 

 对于Form标签

也可以用方便的打操作来完成标签的闭合及其中 属性的设置,有一点VB中With的味道

 

    <% Html.Form().For<Person>((Person)ViewData["person"], "/home/index", form => { %>
        
<% form.Attributes.Add("class""foo"); %>
        姓名: 
<%= form.TextField("Name"%><br />
        开发者
?<%= form.CheckBoxField("IsDeveloper"%><br /><br />
        
<%= form.Submit() %>
    
<%}); %>

 验证Helper

 

一直以来验证控件都是一个比较好用的控件,只是到MVC之后,不能使用控件了,于是大家只好各忙各的JS。

 

MvcContrib中提供了一套基本与WebForm中相同的验证控件,它们的使用方法如下:

  1.  页面的头部先注册脚本
    <%= Html.Validation().ValidatorRegistrationScripts() %>
  2. 页面的最后初始化脚本
    <%= Html.Validation().ValidatorInitializationScripts() %>
  3. 在Form表中设置表单的验证组
    ContractedBlock.gifExpandedBlockStart.gifCode
    <% using (Html.Form("Home""ValidationHelper", FormMethod.Post, Html.Validation().FormValidation("val1"))) { %>
    .
    <%}%>
  4. 写表单项及验证Helper

MvcContrb中提供了以下的验证Helper:

 

  1. 必添验证:
    姓名: <%= Html.TextBox("nameForRequired"%>
    <%= Html.Validation().RequiredValidator("nameForRequiredValidator""nameForRequired""姓名必填.""val1"%>
  2. 正则验证:
    姓名: <%= Html.TextBox("nameForRegex"%>
    <%= Html.Validation().RegularExpressionValidator("nameForRegexValidator""nameForRegex""[^\d]*""姓名不能包含数字.""val1"%>
  3. 范围验证:
    年龄: <%= Html.TextBox("ageForRange"%>
    <%= Html.Validation().RangeValidator("ageForRangeValidator""ageForRange""1""120", ValidationDataType.Integer, "只能是1-120之间.""val1"%>
  4. 比较验证:
    密码: <%= Html.TextBox("firstCompare"%>
    确认: 
    <%= Html.TextBox("secondCompare"%>
    <%= Html.Validation().CompareValidator("compareValidator""firstCompare""secondCompare", ValidationDataType.String, ValidationCompareOperator.NotEqual, "两次密码不一致""val1"%>
  5. 自定义验证:
        <script type="text/javascript">
                
    function ValidateTextEquals(source, args) { 
                    args.IsValid 
    = (args.Value == 'mvc');
                }
            
    </script>
            
    <%= Html.TextBox("textCustom"%>
            
    <%= Html.Validation().CustomValidator("textCustomValidator""textCustom""ValidateTextEquals""文本必须是'mvc'.""val1"%>
  6. 最后是触发验证的方法:一个美丽的提交按钮
        <%= Html.SubmitButton("submit""val1"%>

 ok了这样就实现了表单的验证

 

 表格Helper

 

<%
    Html.Grid
<Person>(
        
"people"
        
new Hash(empty => "没有数据", style => "width: 100%"),
        column 
=> {
            column.For(p 
=> p.Id, "ID Number");//设置列名
            column.For(p 
=> p.Name);
            column.For(p 
=> p.Gender);//正常显示
            column.For(p 
=> p.RoleId).Formatted("角色ID: {0}");//format格式也很好
            column.For(
"Custom Column").Do(p => { %>
                
<td>这是For的自定义形式</td>    
            
<% });
        }
    );
%>

 

 

转载于:https://www.cnblogs.com/chsword/archive/2008/08/11/mvccontrib_formhelper.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436121.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WinCE控制面板添加应用程序

WinCE系统中的控制面板和Windows系统中的控制面板原理是一样的&#xff0c;里面就是包含了一些应用程序。WinCE系统的控制面板由Ctlpnl.exe&#xff0c;Control.exe和一些.cpl文件组成&#xff0c;其中Ctlpnl.exe和Control.exe用于控制控制面板的文件夹显示和架构&#xff0c;而…

【转】滚动条消息(WM_VSCROLL和WM_HSCROLL)

转自&#xff1a;https://blog.csdn.net/zmq5411/article/details/6756189 &#xff08;1&#xff09;当用户单击滚动条或者是拖动滑块时&#xff0c;Windows会向窗口过程发送WM_VSCROLL消息&#xff08;垂直滚动时&#xff09;或者是WM_HSCROLL消息&#xff08;水平滚动时&am…

【转】CMMI环境下,该如何实施Agile?

“CMMI与敏捷之间是否有什么样的关系&#xff1f;是矛盾的&#xff1f;还是可融合的&#xff1f;”“在CMMI环境下如何实施敏捷&#xff1f;”自从“敏捷”诞生以后&#xff0c;此类话题就此起彼伏&#xff0c;从未停止。前几日&#xff0c;在AgileChina的讨论组中&#xff0c;…

透析WINCE的控制面板

WindowsCE是微软公司嵌入式、移动计算平台的基础&#xff0c;它是一个开放的、可升级的32位嵌入式操作系统&#xff0c;是基于掌上型电脑类的电子设备操作系统&#xff0c;它是精简的Windows 95,Windows CE的图形用户界面相当出色。Windows CE作业系统是Windows家族中最新的成员…

oracle 游标 904,如何解决Oracle数据库游标连接超出问题

如何解决Oracle数据库游标连接超出问题发布时间&#xff1a;2020-07-21 10:57:35来源&#xff1a;亿速云阅读&#xff1a;103作者&#xff1a;小猪这篇文章主要讲解了如何解决Oracle数据库游标连接超出问题&#xff0c;内容清晰明了&#xff0c;对此有兴趣的小伙伴可以学习一下…

【转】windows程序设计(14):鼠标消息详解

关于鼠标的一些细节知识&#xff1a; 通常&#xff0c;我们发消息时&#xff0c;都是对一个特定的窗口&#xff0c;但是对于鼠标消息却不然&#xff1a;只要鼠标跨越窗口或者在某窗口中按下鼠标按键&#xff0c;那么窗口消息处理程序就会收到鼠标消息&#xff0c;而不管该窗口…

用多媒体库 Bass.dll 播放 mp3 [15] - 设置与获取播放速度

本例效果图:代码文件:unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ComCtrls;typeTForm1 class(TForm)OpenDialog1: TOpenDialog;Button1: TButton;Button2: TButton;Button3: TButton;TrackBar1:…

详解WINCE的控制面板

曾经在我的一篇《控制面板的创建》中介绍过WinCE控制面板的结构,不过由于那篇文章其目的只在于控制面板如何调用EXE程序,故对控制面板也仅是泛泛而谈.不过在这篇文章中,我们将对WinCE的使用方法来个整体的详解. 1.控制面板的结构 控制面板其实也是个动态链接库…

【转】设置Win32窗口背景颜色

窗口类结构体中&#xff0c;有一个窗口背景成员&#xff0c;hbrBackground。它是一个画刷句柄类型。在Windows中有各种各样的句柄&#xff0c;比如窗口句柄、实例句柄&#xff0c;画刷句柄&#xff0c;文件句柄等等&#xff0c;他们都是句柄类型&#xff0c;只是每一种句柄都和…

oracle中plsql块的结构,oracle plsql的结构

变量声明部分(没有变量可以不写declare)begin执行部分exception异常处理部分end*&#xff1a;declare 和 exception部分是可选的(1)PL/sql中变量的定义格式1变量名 变量类型 【约束】 default 默认值格式2变量名 变量类型 【约束】【&#xff1a;初始值】(2)一个简单的PL/sql块…

【转】Dicom文件解析!!!!!!

转自&#xff1a;https://blog.csdn.net/leaf6094189/article/details/8510325 Dicom全称是医学数字图像与通讯&#xff0c;这里讲的暂不涉及通讯那方面的问题 只讲*.dcm 也就是diocm格式文件的读取&#xff0c;读取本身是没啥难度的 无非就是字节码数据流处理。只不过确实比较…

VS2008 JS脚本调试总是调试旧代码 真不知道怎么回事?谁能帮帮我呀!

如图,[dynamic]标记的是调试的元文件 xml1.htm[dynamic]和xml.js[dynamic] 我更改后的文件是xml1.htm和xml.js,见图1 2 调试的文件有debugger 更改后的文件我把debugger注了 js脚本中我把变量给改了见3 4 ,所以在浏览新的xml1.htm时,竟然报对象找不到,真实受不了了!!! 为什么我…

蜂窝注册表和永久存储

WindowsCE有两种注册表&#xff0c;一种是基于RAM的&#xff0c;一种是基于蜂窝的注册表&#xff1b;WindowsCE会默认使用前者。如果是使用前者&#xff0c;PB在编译的时候会先把common.reg、platform.reg、project.reg及所有的.reg文件的内容合并到reginit.ini文件&#xff0c…

修改oracle默认日期,Oracle 修改默认日期格式

1、Oracle的日期格式Oracle数据缺省的时间格式数据的显示形式&#xff0c;与所使用的字符集有关。一般显示年月日&#xff0c;而不显示时分秒。例如&#xff0c;使用us7ascii字符集(或者是其他的英语字符集)时&#xff0c;缺省的时间格式显示为&#xff1a;28-Jan-2003&#xf…

【转】C#开发PACS医学影像处理系统(一):开发背景和功能预览

转自&#xff1a;https://www.cnblogs.com/Uncle-Joker/p/13646949.html 本系列文章将从以下模块和大家分享和讨论使用C#开发医学软件PACS和RIS系统&#xff0c; 国内相关资料比较少&#xff0c;也借此机会丰富一下医学软件开发生态&#xff0c;讨论技术难点&#xff0c;希望…

《WF编程》系列之30 - 基本活动:错误处理

《WF编程》系列之30 - 基本活动:错误处理 4.3 错误处理 Fault,故障,现在官方已经将其翻译为错误,那么以后的随笔中我也就采用官方的翻译吧. 错误处理也属于流程控制的一部分,这一节我来介绍一下有关错误处理的活动.错误是指在工作流执行期间发生的异常.我们可以使用错误处理程…

wince 自动启动程序设置

这是我在做wince6的时候为设置自启动而寻找的方法。我发现公司定的这个设备在“Program Files”和windows文件夹下放置的东西在机子重启之后就什么都没有了。我只有使用注册表测试&#xff0c;发现重启后还存在&#xff0c;因此我用注册表方式设置了自启动。而在这个过程中&…

oracle错误27101,ORA-27101ORA-01034错误解决

Oracle已经启动&#xff0c;连接sqlplus后&#xff0c;进行查询&#xff0c;出现下面错误ORA-01034: ORACLE not availableORA-27101: shared memory realm doesOracle已经启动&#xff0c;连接sqlplus后&#xff0c;进行查询&#xff0c;出现下面错误ORA-01034: ORACLE not av…

NOD32升级ID获取器For流星无语更新了

NOD32升级ID获取器For流星无语更新了一下,现在可以直接把用户名密码写入注册表了,连复制/粘贴操作都可以免了...转载于:https://www.cnblogs.com/lxwy/archive/2008/09/05/4420722.html

string也可以很精彩

// //TITLE: // string也可以很精彩 //AUTHOR: // norains //DATE: // Moday 03-November-2008 //Environment: // NONE // 对于习惯于MFC架构的朋友来说&#xff0c;估计直接采用API方式写代码最痛苦的莫过于没有CString。其实&#xff0c;在STL里面&#xff…