• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > ASP.NET预定义模板介绍

ASP.NET预定义模板介绍

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了自定义控件 asp.net,自定义表单 asp.net,asp.net,asp net培训,asp和asp.net的区别等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

一、 实例演示:通过模板将布尔值显示为RadioButton

在默认的情况下,不论是对于编辑模式还是显示模式,一个布尔类型的属性值总是以一个CheckBox的形式呈现出来。我们创建如下一个表示员工的类型Employee,它具有一个布尔类型的属性IsPartTime表示该员工是否为兼职。

public class Employee 
 { 
 [DisplayName("姓名")] 
 public string Name { get; set; } 
 [DisplayName("部门")] 
 public string Department { get; set; } 
 [DisplayName("是否兼职")] 
 public bool IsPartTime { get; set; } 
} 
</div>

如果我们直接调用HtmlHelper<TModel>的EditorForModel方法将一个Employee对象显示在某个将Employee类型作为Model的强类型View中,下图体现了默认的呈现效果。我们可以看到表示是否为兼职的IsPartTime属性对应着一个CheckBox。

现在我们希望的是将所有布尔类型对象显示为两个RadioButton,具体的显示效果如下图所示。那么我们就可以通过创建一个Model类型为Boolean的View来创建一个模板,使之改变所有布尔类型对象的默认呈现效果。

由于我们需要改变的是布尔类型对象在编辑模式下的呈现形式,所以我们需要将作为模板的分布View定义在EditorTemplates目录下,这个目录可以存在于Views/ Shared下,也可以存在于Views/{ControllerName}下。由于ASP.NET MVC是采用数据类型作为匹配条件来寻找对应的模板的,所以我们需要将分部模板View命名为Boolean。下面的代码片断体现了这个分部试图的整个定义,我们通过调用HtmlHelper的RadioButton方法将两个布尔值(True/False)映射为对应的RadioButton,并且采用<table>来布局。

 @model bool 
<table> 
 <tr> 
 <td>@Html.RadioButton("",true,Model)是</td> 
 <td>@Html.RadioButton("",false,!Model)否</td> 
 </tr> 
</table> 
</div>

值得一提的是,我们没有指定RadioButton的名称,而是指定一个空字符串,Html本身会对其进行命名,而命名的依据就是本章介绍的核心:Model元数据。Employee的IspartTime属性呈现在界面上对应的HTML如下所示,我们可以看到两个类型为radio的<input>元素的name被自动赋上了对应的属性名称。美中不足的是它们具有相同的ID,如果希望让ID具有唯一性,可以对模板进行更加细致的定制。

<div class="editor-label"><label for="IsPartTime">是否兼职</label></div> 
<div class="editor-field"> 
 <table> 
 <tr> 
 <td><input checked="checked" id="IsPartTime" name="IsPartTime" type="radio" value="True" .../>是</td> 
 <td><input id="IsPartTime" name="IsPartTime" type="radio" value="False" />否</td> 
 </tr> 
 </table> 
</div> 
</div>

二、预定义模板

上面我们介绍如何通过View的方式创建模板进而控制某种数据类型或者某个目标元素最终在UI界面上的HTML呈现方式,实际上在ASP.NET MVC的内部还定义了一系列的预定义模板。当我们调用HtmlHelper/HtmlHelper<TModel>的模板方法对Model或者Model的某个成员进行呈现的时候,系统会根据当前的呈现模式(显示模式和编辑模式)和Model元数据获取一个具体的模板(自定义模版或者预定义模版)。由于Model具有显示和编辑两种呈现模式,所以定义在ASP.NET MVC内部的默认模版分为这两种基本的类型。接下来我们就逐个介绍这些预定义模版以及最终的HTML呈现方式。

EmailAddress
该模板专门针对用于表示Email地址的字符串类型的数据成员,它将目标元素呈现为一个href属性具有“mailto:”前缀的链接(<a></a>)。由于该模板仅仅用于Email地址的显示,所以只在显示模式下有效,或者说ASP.NET MVC仅仅定义了基于显示模式的EmailAddress模板。为了演示数据在不同模板下的呈现方式,我们定义了如下一个简单的数据类型Model,我们通过在属性Foo上应用UIHintAttribute特性将模板名称设置为“EmailAddress”。

public class Model 
{ 
 [UIHint("EmailAddress")] 
 public string Foo { get; set; } 
} 
</div>

然后在一个基于Model类型的强类型View中,我们通过调用HtmlHelper<TModel>的DisplayFor方法将一个具体的Model对象的Foo属性以显示模式呈现出来。

@model Model 
@Html.DisplayFor(m=>m.Foo) 
</div>

如下的代码片断表示Model的Foo属性对应的HTML,我们可以看到它就是一个针对Email地址的连接。当我们点击该链接的时候,相应的Email编辑软件(比如Outlook)会被开启用于针对目标Email地址的邮件编辑。

<a href="mailto:foo@gmail.com">foo@gmail.com</a> 
</div>

HiddenInput
关于默认模板HiddenInput我们不应该感到模式,前面介绍的HiddenInputAttribute特性就是将表示Model元数据的ModelMetadata对象的TemplateHint属性设置为HiddenInput。如果目标元素采用HiddenInput模板,在显示模式下内容会以文本的形式显示;编辑模式下不仅会以文本的方式显示其内容,还会生成一个对应的type属性为“hidden”的<input>元素。如果表示Model元数据的ModelMetadata对象的HideSurroundingHtml属性为True(将应用在目标元素上的特性HiddenInputAttribute的DisplayValue属性设置为False),不论是显示模式还是编辑模式下显示的文本都将消失。

同样以上面定义的数据类型Model为例,我们通过在Foo属性上应用UIHintAttribute特性将模板名称设置为“HiddenInput”。

public class Model 
{ 
 [UIHint("HiddenInput")] 
 public string Foo { get; set; } 
 public bool Bar { get; set; } 
 public decimal Baz { get; set; } 
} 
</div>

然后在一个基于Model类型的强类型View中分别调用HtmlHelper<TModel>的DisplayFor和EditFor方法将一个具体的Model对象的Foo属性以显示和编辑模式呈现出来。

@model Model 
@Html.DisplayFor(m=>m.Foo) 
@Html.EditorFor(m=>m.Foo) 
</div>

分别以两种模式呈现出来的Foo属性对应的HTML如下(包含在花括号中的GUID表示属性值)。第一行是针对显示模式的,可以看出最终呈现出来仅限于表示属性值得文本;而编辑模式对应的HTML中不仅包含属性值文本,还具有一个对应的类型为“hidden”的<input>元素。

{42A1E9B7-2AED-4C8E-AB55-78813FC8C233} 
{42A1E9B7-2AED-4C8E-AB55-78813FC8C233}<input id="Foo" name="Foo" type="hidden" value="{42A1E9B7-2AED-4C8E-AB55-78813FC8C233}" /> 
</div>

现在我们对数据类型Model做一下简单修改,将应用在属性Foo上的UIHintAttribute特性替换成HiddenInputAttribute特性,并将其DisplayValue属性设置成False。

public class Model 
{ 
 [HiddenInput(DisplayValue = false)] 
 public string Foo { get; set; } 
 public bool Bar { get; set; } 
 public decimal Baz { get; set; } 
} 
</div>

由于应用在目标元素上的HiddenInputAttribute特新的DisplayValue属性会最终控制对应ModelMetadata的HideSurroundingHtml属性,而后者控制是否需要生成用于显示目标内容的HTML。所以针对针对的Model定义,最终会生成如下一段HTML。

<input id="Foo" name="Foo" type="hidden" value="{42A1E9B7-2AED-4C8E-AB55-78813FC8C233}" /> 
</div>

Html

如果目标对象的内容包含一些HTML,并需要在UI界面中原样呈现出来,我们可以采用Html模板。和EmailAddress模板一样,该模板仅限于显示模式。为了演示Html模板对目标内容的呈现方法与默认呈现方式之间的差异,我们定义了如下一个数据类型Model。该数据类型具有两个字符串类型的属性Foo和Bar,其中Foo上面应用UIHintAttribute特性将模板名称设置为“Html”。

<
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • asp.net webform自定义分页控件
  • asp.net DataTable导出Excel自定义列名的方法
  • Asp.net自定义控件之单选、多选控件
  • Asp.net自定义控件之加载层
  • 在ASP.NET 2.0中操作数据之二十六:排序自定义分页数据
  • 在ASP.NET 2.0中操作数据之十一:基于数据的自定义格式化
  • ASP.NET预定义模板介绍
  • ASP.NET中保护自定义的服务器控件
  • ASP.NET通过自定义函数实现对字符串的大小写切换功能
  • asp.net自定义控件中注册Javascript问题解决方案

相关文章

  • 2017-05-11.net中as和is之间的区别分析
  • 2017-05-11C# SetWindowPos窗口置顶使用说明
  • 2017-05-11ASP.NET创建三层架构图解详细教程
  • 2017-05-11ASP遗留的二十大积习
  • 2017-05-11asp.net利用反射实现给model类赋值的方法
  • 2017-05-11通过RadioButton对DataList控件进行单选实例说明
  • 2017-05-11Asp.Net、asp实现的搜索引擎网址收录检查程序
  • 2017-05-11ASP.NET 调用百度搜索引擎的代码
  • 2017-05-11Asp.net下用JQuery找出哪一个元素引起PostBack
  • 2017-05-11linq 查询 Linq 高级查询实例代码

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Asp.Net平台下的图片在线裁剪功能的实现代码(源码打包)
    • asp.net实现生成静态页并添加链接的方法
    • ASP.NET数据绑定之DataList控件
    • ASP.NET MVC数组模型绑定详解
    • asp.net实现非常实用的自定义页面基类(附源码)
    • 解读ASP.NET 5 & MVC6系列教程(10):Controller与Action
    • 用类的继承关系(重写父类的方法)实现简易后台代码模板
    • asp.net下用url重写URLReWriter实现任意二级域名的方法第1/2页
    • ASP.NET下母版页和内容页中的事件发生顺序整理
    • ASP.NET中DropDownList下拉框列表控件绑定数据的4种方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有