ASP.NET 3.5 Extensions新特性:ASP.NET Dynamic Data 体验(下)

概述

ASP.NET 3.5 Extensions新特性:ASP.NET Dynamic Data 体验(上)一文中简单的展示了一下ASP.NET Dynamic Data生成的数据视图网页效果,在这一篇中,看一下如何更进一步定制我们的网站。

定制网站外观

首先从最简单的开始定制,在网站下有一个MasterPage.master三个CSS样式文件,可以先从这里下手,修改网站的整体外观。如简单修改一下MasterPage,使其看起来如下所示:

TerryLee_DynamicData_012

自定义动态数据视图

自定义动态数据视图,可以修改App_Shared/DynamicDataPages下的页面来实现,如可以修改一下ListDetailsTemplate.aspx,为页面中的每部分加上一个标题:

TerryLee_DynamicData_014

除此之外,我们可以针对特定的表进行数据视图的定制,在网站下添加一个Products文件夹(注意与表名必须相同),并添加一个ListDetail.aspx页面,在页面不显示Detail信息,这时候再打开Products时,显示的页面中没有了Detail信息:

TerryLee_DynamicData_013

URL的访问方式是~/{table}/{viewName}.aspx,在Web.config中指定:

<dynamicData dataContextType="" enableTemplates="true">
  <mappings queryStringKeyPrefix="" pattern="~/{table}/{viewName}.aspx">
    <add actions="list,details" viewName="ListDetails" templateFile="ListDetailsTemplate.aspx" />
    <!--
      <add actions="list" viewName="List" templateFile="ListTemplate.aspx" />
      <add actions="details" viewName="Details" templateFile="DetailsTemplate.aspx" />
    -->
    <!--
      Special overriding cases
      <add actions="list,details" tables="Products,Categories" viewName="SpecialName" templateFile="ListTemplate.aspx"/>
      <add actions="list" tables="Products" templateFile="DetailsTemplate.aspx" path="~/customPath.aspx"/>
      <add actions="list" tables="Orders" viewName="MyListViewName"/>
    -->
  </mappings>
</dynamicData>
</system.web.extensions>

自定义动态数据字段

自定义动态数据字段,可以通过修改App_Shared/DynamicDataFields下的用户控件来实现,如打开Text_Edit.ascx,为其中的TextBox添加一个背景色:

<asp:TextBox ID="TextBox1" runat="server" Text='<%# DataValue %>' BackColor="#FDDCBF"></asp:TextBox>

再运行网站,进行数据编辑时可以看到:

TerryLee_DynamicData_015

自己创建动态数据字段

除了使用上面的方法自定义动态数据字段之外,还可以自己创建动态数据字段,在App_Shared/DynamicDataFields下添加一个Dynamic Data Field:

TerryLee_DynamicData_016

可以看到控件继承于FieldTemplateUserControlBase类,在其中添加一个Label控件,并设置它的前景色为红色:

<%@ Control Language="C#" Inherits="System.Web.DynamicData.FieldTemplateUserControlBase" %>

<asp:Label id="CurrentValueID" runat="server"
    Text='<%# DataValueString %>' ForeColor="#FF0000">  
</asp:Label>

关联数据表中的字段和控件,需要添加一个pratial类,使用RenderHint特性来指定,第一个参数是字段,第二个参数是与其相关联的控件:

[RenderHint("Status", "StatusControl")]
public partial class Item
{

}

然后再运行网站,进入Item数据视图,可以看到Status的前景色都变成了红色:

TerryLee_DynamicData_017

自定义数据验证

在ASP.NET Dynamic Data中内置支持数据验证,我们也可以进行自定义的数据验证。同样是添加一个pratial类,内置的验证特性有Range、Regex、Require三个,如下代码所示:

using System;
using System.Web.DynamicData;

[Range("Qty", 100, 1000,
    ErrorMessage = "Qty必须在{1}和{2}之间")]
public partial class Inventory
{

}
在运行时如果输入小于100或者大于1000将会给出提示信息:TerryLee_DynamicData_018 如果使用使用上面的几个特性还不够的话,你也可以使用LINQ to SQL中的局部方法OnPropertyChanging来进行验证,如下代码所示
public partial class Product 
{
    partial void OnProductNameChanging(string value) 
    {
      if (!Char.IsUpper(value[0])) {
        throw new Exception("Product name must start with an uppercase letter.");}
    }
}

结束语

关于ASP.NET 3.5 Extensions中的新特性动态数据支持就用两篇文章介绍到这里,后续文章再介绍其他的特性。

ASP.NET 3.5 Extensions新特性:ASP.NET Dynamic Data 体验(上)

作者:TerryLee
出处:http://terrylee.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted @ 2007-12-19 23:45 TerryLee 阅读(5806) 评论(37)  编辑 收藏 网摘 所属分类: [08]  Web开发

  回复  引用    
#1楼 2007-12-19 23:52 | Eeyore [未注册用户]
沙发?支持TerryLee
:)
  回复  引用  查看    
#2楼 [楼主]2007-12-19 23:54 | TerryLee      
@Eeyore
没错,是沙发:)

// 晚上Live Writer发不了文章,贴图累死了-_-
  回复  引用    
#3楼 2007-12-19 23:58 | Eeyore [未注册用户]
好人啊,造福后人~~
  回复  引用  查看    
#4楼 [楼主]2007-12-20 00:07 | TerryLee      
@Eeyore
呵呵:)
  回复  引用  查看    
#5楼 2007-12-20 09:48 | 阿滨       
好像没什么实际用途?
  回复  引用  查看    
#6楼 2007-12-20 09:53 | lovecherry      
做后台管理,呵呵
  回复  引用  查看    
#7楼 2007-12-20 09:57 | aspnetx      
TerryLee的Vista是来自于MSPP的吗?还是OEM的?
  回复  引用  查看    
#8楼 [楼主]2007-12-20 10:55 | TerryLee      
@阿滨
有时候做简单的快速录入还有点用,如果加上定制的话:)
  回复  引用  查看    
#9楼 [楼主]2007-12-20 10:57 | TerryLee      
@aspnetx
我有MSND订阅:)
  回复  引用  查看    
#10楼 [楼主]2007-12-20 10:57 | TerryLee      
@lovecherry
做后台管理可能也得定制一下,否则客户会。。。
  回复  引用    
#11楼 2007-12-20 12:05 | handBoy [未注册用户]
学习新东西..ms似乎使coder越来越懒了
  回复  引用    
#12楼 2007-12-20 15:42 | 膘汉 [未注册用户]
有一些列我不想让GridView显示出来,比如nvarchar(max)类型的字段,怎么办?
  回复  引用  查看    
#13楼 2007-12-20 16:47 | kylinindotnet      
哈哈,师兄,越来越强了。碰巧看到你的cnblogs的博客。不知道还记不记得我(徐旭平)。
  回复  引用  查看    
#14楼 2007-12-20 17:32 | Dove.Net      
这个用来做后台管理确实是不错呀,不过基本上也只适合做后台
前台就用MVC,MS真是全帮我们想了
  回复  引用  查看    
#15楼 [楼主]2007-12-20 19:53 | TerryLee      
@handBoy
嗯,不过还是需要一些定制工作的
  回复  引用  查看    
#16楼 [楼主]2007-12-20 19:57 | TerryLee      
@膘汉
目前没看到相应的方法,有一个变通的方法,创建自定义动态数据控件,然后设置里面的控件Visible属性为false,试试看。
  回复  引用  查看    
#17楼 [楼主]2007-12-20 19:58 | TerryLee      
@kylinindotnet
嗯,记得。你把你的MSN发Mail给我吧:)
  回复  引用  查看    
#18楼 [楼主]2007-12-20 19:58 | TerryLee      
@Dove.Net
嗯,对于做后台管理有些帮助
  回复  引用    
#19楼 2007-12-21 09:30 | DATAFLOW1 [未注册用户]
TerryLee的文章一直很经典
  回复  引用  查看    
#20楼 2007-12-21 15:29 | 幕后      
安逸啊····

  回复  引用  查看    
#21楼 2007-12-23 16:45 | overred      
不错也
博客皮肤很酷
  回复  引用  查看    
#22楼 [楼主]2007-12-23 19:14 | TerryLee      
@overred
整整花了我一个周末啊,这个Blog系统DOM结构太难控制了....
  回复  引用    
#23楼 2007-12-24 16:44 | 徐旭平 [未注册用户]
@TerryLee
李师兄,给你邮件了。
  回复  引用    
#24楼 2007-12-24 21:33 | Anim [未注册用户]
Can you plz explain how to show images and thumbnails?
  回复  引用  查看    
#25楼 2007-12-25 10:09 | 飄lá┽蕩去      
换了个样式都不认识了
  回复  引用    
#26楼 2007-12-27 04:09 | fight4it [未注册用户]
怎么感觉你的文章内容都是在重复一下ASPNET上下载的Video里面的内容呀
  回复  引用  查看    
#27楼 2007-12-29 12:05 | 李永京      
请问TerryLee,你的随笔中的代码段用什么插件的啊?我用Insert Code for Windows Live Writer感觉颜色突出不一般。是不是自己写CSS样式的啊?
  回复  引用  查看    
#28楼 [楼主]2008-01-03 20:22 | TerryLee      
@飄lá┽蕩去
呵呵
  回复  引用  查看    
#29楼 [楼主]2008-01-03 20:23 | TerryLee      
@fight4it
是吗?

Aspnet上的Video我还没有下载过
  回复  引用  查看    
#30楼 [楼主]2008-01-03 20:24 | TerryLee      
@李永京
Paste from VS

然后自定义code样式:)
  回复  引用  查看    
#31楼 2008-04-11 17:03 | 江大鱼      
Cool feature...
  回复  引用  查看    
#32楼 2008-11-21 19:43 | sheva.wen      
请问这个以表名命名的类要放在哪个文件夹下?

[RenderHint("Status", "StatusControl")]
public partial class Item

  回复  引用  查看    
#33楼 [楼主]2008-11-22 00:05 | TerryLee      
@sheva.wen
有点记不太清了,呵呵。。。
  回复  引用  查看    
#34楼 2008-11-22 22:09 | sheva.wen      
找到了,在dbml文件的designer类里,谢了。
  回复  引用  查看    
#35楼 [楼主]2008-11-24 09:55 | TerryLee      
@sheva.wen
:)

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-03-02 10:54 编辑过
Google站内搜索




相关链接: