html辅助方法引入验证类后怎么写,Html辅助方法
ASP.NET MVC3 读书笔记二(Html辅助方法)
在实际的程序中,除了在View中展示数据外,还需要在View与后台的数据进行交互,在View中我就需要用的表单相关的元素;
在MVC3框架中,我们可以用到Html的相关辅助方法进行对表单的输出;
视图中Html的类型是System.Web.Mvc.HtmlHelper
1、 Html.BeginForm()
主要是生成表单的form值,如果表单时强类型视图,则在提交表单的时候,会自动将表单元素name名称与强类型视图中的类型实体的属性值相同的进行填充;
同样在表单中,如果我们是强类型视图,则可以直接使用@Model.UserName将值输到指定位置;
2、 Html.ValidationSummary()
一般我们在controller中选定的action下添加强类型的create视图,都会在表单下生成Html.ValidationSummary(true);这样的东西,传true和false有什么区别了?
ValidationSummary辅助方法可以用来显示ModelState字典中所有验证错误的无序列表。使用bool类型参数(值为true的情况)来告知辅助方法排除属性级别错误;
具体示例解释如下
View Code
publicActionResult SelStudent() {
ModelState.AddModelError("", "this is all wrong");
ModelState.AddModelError("UserName", "is Required");
Student s= newStudent();
s.UserName= "regicide";returnView(s);
}
如果在页面使用Html.ValidationSummary(true); 则is required会显示在对应的UserName文本框的下面;如果使用false则isRequired会显示到this is all wrong下面
注:如果要显示出对应的样式,引入 /Content/Site.css 即可
3、 Html.TextBox()、Html.TextArea()
此方法主要为生成和< textarea />
@Html.TextBox("title","",new {@style="background-color:red",ReadOnly="ReadOnly"})
就会生成如下的html标签;如果你使用@Html.Editor方法则不会提供传递html元素的相关重载;
注:如果在强类型视图中按照如下定义
publicActionResult SelStudent() {
Student s= newStudent();
ViewBag.UserName= "free";
s.UserName= "regicide";returnView(s);
}
然后通过@Html.TextBox("UserName")输出,则元素中默认值是free而不是regicide,因为在页面的取值中,如果不强行指定取Model的UserName则会默认取ViewBag的动态值UserName
如果我们给一个文本框加自己的属性比如 new{data_my1=’free’} 此时被编译后是 data-my1=’free’, 注意下划线和短横线的区别;
4、 Html.Label()
在我们的使用中,很少使用label的标签,label标签视乎并不常用;其实lable的妙用在于
Age
当我们点击label标签(age)的时候,光标会自动定位到id位age的文本框;所以Html.label()主要生成Age的label
5、 Html.DropDownList()
下拉框的用法,主要是用于在后台查询出的IEnumerable进行数据绑定;
示例为:
View Code
publicActionResult SelStudent() {
List sss = new List();
SexSelect ss= newSexSelect();
ss.Id= 0;
ss.Text= "男";
sss.Add(ss);
ss= newSexSelect();
ss.Id= 1;
ss.Text= "女";
sss.Add(ss);var t =sss.AsEnumerable();
ViewBag.Sex= new SelectList(t, "Id", "Text");returnView(s);
}
@Html.DropDownList("Sex")就会自动绑定后台指定的t显示到下来框;
6、 Html.ValidationMessage()
当ModelState字典中出现错误时,可以使用此方法来显示相应的错误;此用法在第二点中(Html.ValidationSummary())略有提到,后面讲模型验证还会继续的说明此用法
7、 Html.Editor()
此方法在生成html元素最为特殊,因为上面的根据名称可以知道大致的html元素控件;而editor则不一样了;
Editor方法可以通过数据注解来改变生成Html,比如我在实体上面指定“DataType[DataType.MultitineText]”,则Editor则会自动生成为标签;
并且Eidtor方法还支持模板的重载;
在Controller对应的文件下面添加子文件夹,命名为“EditorTemplates”(强命名),然后添加一个名为“DateTime.cshtml”(强命名),并写如下代码:
@{
Layout= null;
}
@Html.TextBox("",ViewData.TemplateInfo.FormattedModelValue,new {@class="text-box single-line",data_datepicker="true",data_test="regicide"})
则在强类型实体中定义为DateTime类型的字段通过Editor生成就会变成如下:
这就是Editor的根据模型进行智能生成的好处;当然如果有的部分不想使用DateTime.cshtm中的方式进行生成html,可以将DateTime.cshtml进行更名,更名后,使用@Html.Editor("Birthday","SpecialDateTime")“SpecialDateTime”为视图名称,这样也可以进行生成.
8、 Html.Hidden()
Hidden就是生成隐藏文本域的方法;比如:
@Html.Hidden("id","1")
就会生成一个隐藏文本域
MVC3 中如果使用强类型隐藏文本域的作用就很大,比如一个更新的强类型视图,一共有 5 个字段,你只更新 3 个字段,那么就需要把另外两个字段放在隐藏文本域中,否则的话,强类型提交到后台就就只会赋值页面绑定的 3 个字段,另外 2 个会丢失
9、 Html.Password()
这个比较简单,用法跟hidden一样,就是会生成一个password类型的input
10、Html.RadioButton()
RadioButton主要是生成一组来供用户选择,根据name来确定一组按钮;
@Html.RadioButton("color", "red")red@Html.RadioButton("color", "blue",true)blue@Html.RadioButton("color", "green")green
就会生成为:
red
blue
green
11、Html.CheckBox()
这个辅助方法比较特殊一点点,CheckBox生成元素会生成2个input元素;
@Html.CheckBox("sel",true)
生成的源代码为:
一个checked一个hidden;
它渲染两个输入元素的主要原因是,HTML规范中规定了浏览器只提交选中的复选框的值,在上面的例子中即使sel的checked没有被选中,也会被提交一个false到后台;
12、 Html.ActionLink()、Html.RouteLink()
看到这两个,好像没怎么想到跟html中的什么东西对应;从字面上理解就是生成link的东西;
ActionLink主要是渲染一个指向另外一个控制器操作的超链接。
比如:
@Html.ActionLink("超链接","SelStudent","Home")
就会生成为:
超链接
在ActionLink中还重载了一些可以传递htmlAttributs的方法;
RouteLink和ActionLink差不多,但是RouteLink可以接收路由名称而不接收控制器名称和操作名称。
比如上面的ActionLink的例子可以转换为
@Html.RouteLink("超链接",new {action="SelStudent"})
当然,还有一个区别就是可以直接指定路由名称;
要实现上面的actionlink效果还可以写成
@Html.RouteLink("超链接","Default")
Default是Global启动的时候注册的一个默认路由;这里如果只指定路由,默认的action会变成当前view的action;
13、Html.Partial()、Html.RenderPartial()
Partial用于将分部视图转换为字符串;
新建一个action 为PartialTest 然后添加到分部视图,就会添加一个完全空白的页面(不包含一个标签),然后在需要使用的地方
@Html.Partial("PartialTest")
只需要指定分部视图名称即可;
这样就会把PartialTest中的内容写入到@Html.Partial("PartialTest")所在的位置;有点类似于java中的include导入页面一样
RenderPartial()跟Partial差不多的用途,只是返回的值不一样;Partial返回的是MvcHtmlString,而RenderPartial返回的是空,输入我们手动的在打印一遍;
@{Html.RenderPartial("PartialTest");}
这样就跟Partial效果一样了;但RenderPartial不是返回字符串,而是直接写入响应输出流,直接写入响应流性能上比Partial要好一点;
14、Html.Action()、Html.RenderAction()
Action和RenderAction差不多,一个是直接返回MvcHtmlString一个是返回空,把数据写到响应流;
借上面一个示例说明下分部视图如何不让直接访问,必须用html的辅助方法访问;
[ChildActionOnly]publicActionResult PartialTest() {returnPartialView();
}
这样就只允许通过Html的辅助方法【Action、RenderAction、Partial、RenderPartial】来进行访问了
在14的示例中如果在ActionResult加上一个[ActionName(“MyTest”)],此时在访问PartialTest时就要用MyTest才能访问到了;
小结:看了这么多系统提供的Html辅助方法,我们是不是该自己写一个自定义的Html辅助方法了?那么开始吧!
新建一个静态类,里面定义一个自己写好的方法
public static MvcHtmlString TestHtml(thisHtmlHelper html) {
MvcHtmlString mhs= new MvcHtmlString("
}
方法返回一个MvcHtmlString(如果是想返回html不被转义的情况下,否则可以返回string),里面顶一个div,然后直接返回;
在页面中使用时得先引入新建的这个类的命名空间;
在顶部写上 “@using MVC3Pro.Controllers”
然后就可以像使用其他html辅助方法一样使用点操作了;(在点操作的时候,方法的下面有个向下的小箭头,是代表扩展方法,加this传递进去,将当前方法附加到this的上面为附加方法)
@Html.TestHtml()--------------------------------------------
/*结果*/
html辅助方法引入验证类后怎么写,Html辅助方法相关推荐
- 【Groovy】Groovy 方法调用 ( Java 类成员及 setter 和 getter 方法设置 | Groovy 类自动生成成员的 getter 和 setter 方法 )
文章目录 一.Java 类成员及 setter 和 getter 方法设置 二.Groovy 类自动生成成员的 getter 和 setter 方法 一.Java 类成员及 setter 和 gett ...
- 【Pytorch神经网络理论篇】 05 Module类的使用方法+参数Parameters类+定义训练模型的步骤与方法
1 Module类的使用方法 1.1 Module类的add_module()方法 1.1.1 概述 add_module():将XX层插入到模型结构中 1.1.2 add_module()----L ...
- java类似php魔术方法_PHP与类有关的几个魔术方法
与类有关的其他魔术方法 序列化与反序列化技术 含义: 序列化: 就是将一个变量所代表的"内存"数据,转换为"字符串"形式并持久保存在硬盘上的一种做法. 反序列化 ...
- java 获取父类的方法_java 获取类和父类的属性和方法
问题 在日常开发中,经常需要获取当前类和父类的所有属性,没办法只能查API了. getDeclaredFields VS getFields 查阅API得知,class.getDeclaredFiel ...
- Spring4 对Bean Validation规范的新支持(方法级别验证)
Bean Validation standardizes constraint definition, declaration and validation for the Java platform ...
- 类和对象,属性和方法
1. 定义 类:把某一类事物的属性提取出来,形成类,类有属性(也叫成员变量/field字段)和行为 对象:一个具体的实例 注意:从类到对象的说法:1)创建一个对象2)实例化一个对象3)把类实例化 成员 ...
- JAVA300集——面向对象编程-类和对象-构造方法及其重载-方法调用
本章概述 "如何开车":(由多个步骤组成),简单问题,可以使用面向过程. "如何造车":(成千上万个零件,细节很多),复杂问题,宏观上用面向对象把握,微观操作用 ...
- java接口的默认方法,实现类调用接口默认方法
概述 Java8带来了一些全新的特性,包括lambda表达式.函数接口.方法引用.流.可选方法.接口中的静态方法和默认方法. 在本文中,我们将深入讨论为什么java8接口新增了默认方法,如何使用默认方 ...
- java发布后功能不能用,急项目发布后java写的打印功能失效了-求解解决方法
当前位置:我的异常网» J2EE » 急项目发布后java写的打印功能失效了-求解解决方法 急项目发布后java写的打印功能失效了-求解解决方法 www.myexceptions.net 网友分享于 ...
最新文章
- cocos 射线检测 3D物体 (Sprite3D点击)
- [转]一个典型的软件项目的WBS评析
- XamarinAndroid组件教程RecylerView自定义适配器动画
- iOS imageNamed 的缓存问题
- NYOJ 721 纸牌游戏 简单题
- wxWidgets:wxLogNull类用法
- Leetcode题库 5.最长回文子串(C++实现)
- 网络标准之:IANA定义的传输编码
- win7中PowerShell终端打开时自动进入python virtualenv的虚拟环境以及一键切换python版本
- 萝卜家园win11系统32位微软原版镜像v2021.08
- python3 xpath_Python3使用xpath解析
- 【Flink】IncompatibleClassChangeError: Found class org.apache.flink.streaming.runtime.tasks.Processing
- javaScript的常见document对象
- 强制性国家标准 对胎压监测传感器提出更高要求
- 一个点击icon就生成html和css的网页
- 人名和成绩一起排序_excel中怎么让人名和他的成绩一起排序
- matlab mysvd代码解释,关于使用SVD进行PCA主成分提取的代码问题!也是必须涉及到原理的!...
- 吉米多维奇习题集题集loading---
- Displaytag的使用四
- 感谢蜂窝教育,四个月的学习,让我改变了
热门文章
- 神经网络中参数量parameters和FLOPs计算
- 从清洁工到斯坦福教授,一路开挂的她近日入选美国国家医学科学院!
- 捆绑调整Bundle Adjustment(最速下降法、牛顿法、Levenberg-Marquartdt法)
- 在maven项目中使用Junit进行单元测试
- VC++中的通知消息
- 深度学习系列学习博客
- python序列数据类型_python 数据类型 序列——列表
- 干货 | 第六期课程回顾遗传病基因检测和解读
- 误入人体的海洋细菌,能轻易吞噬你的肢体乃至生命
- Bio-protocol实验视频大赛中奖率提升至100%