C#程序中的数据显示:自定义标签和XML、XSL

开发 后端
本文介绍了通过自定义标签和XML、XSL实现C#程序中数据显示的方法。

通过在C#程序中定义标签类,然后在页面进行数据绑定,从而实现数据和显示的分离,显示的样式采用XSL定义。数据实体通过序列化为XML,然后用XSL解析,形成HTML内容。对于其中需要实现安全特性,防范XSS攻击,采用XSL自定义FUNCTION进行ENCODE。 

C#程序中的数据显示实现代码

  1. public class Encoding  
  2.     {  
  3.         public string Encode(string cSource)  
  4.         {  
  5.             return System.Web.HttpUtility.HtmlEncode(cSource);//可以使用Microsoft XSS LIB  
  6.         }  
  7.     }  
  8.     public class EmList : Label  
  9.     {  
  10.         public override bool EnableViewState  
  11.         {  
  12.             getreturn false;}  
  13.         }  
  14.         public string XslFile{get;set;}  
  15.         public object SerialObject{get;set;}  
  16.         protected override void Render(HtmlTextWriter writer)  
  17.         {  
  18.             if (SerialObject == null)  
  19.             {  
  20.                 throw new Exception("对象未初始化");  
  21.             }  
  22.             System.Xml.Serialization.XmlSerializer oSerial = new System.Xml.Serialization.XmlSerializer(SerialObject.GetType());  
  23.             System.Text.StringBuilder oSb = new System.Text.StringBuilder();  
  24.             System.IO.StringWriter oWr = new System.IO.StringWriter(oSb);  
  25.             string Xml = "";  
  26.             oSerial.Serialize(oWr, SerialObject);  
  27.             Xml =oSb.ToString();  
  28.             string cXslFileName = this.MapPathSecure(XslFile);  
  29.             if (!System.IO.File.Exists(cXslFileName))  
  30.             {  
  31.                 throw new Exception("请加自己的处理异常程序");  
  32.             }  
  33.             System.Xml.Xsl.XsltArgumentList xslArgs = new System.Xml.Xsl.XsltArgumentList();  
  34.             Encoding oEn = new Encoding();  
  35.             xslArgs.AddExtensionObject("urn:Encoding", oEn);  
  36.             System.Xml.XmlDocument oDoc = new System.Xml.XmlDocument();  
  37.             try 
  38.             {  
  39.                 oDoc.LoadXml(Xml);  
  40.             }  
  41.             catch 
  42.             {  
  43.                 throw new Exception("请加自己的处理异常程序");  
  44.             }  
  45.             System.Xml.Xsl.XslCompiledTransform oTran = new System.Xml.Xsl.XslCompiledTransform();  
  46.             string cXsl = "";  
  47.             try 
  48.             {  
  49.                 cXsl = System.IO.File.ReadAllText(cXslFileName);  
  50.             }  
  51.             catch 
  52.             {  
  53.                 throw new Exception("请加自己的处理异常程序");  
  54.             }  
  55.             System.IO.StringReader oSr=new System.IO.StringReader(cXsl);  
  56.             System.Xml.XmlReader oRe=System.Xml.XmlReader.Create(oSr);  
  57.             try 
  58.             {  
  59.                 oTran.Load(oRe);  
  60.             }  
  61.             catch 
  62.             {  
  63.                 throw new Exception("请加自己的处理异常程序");  
  64.             }  
  65.             try 
  66.             {  
  67.                 oTran.Transform(oDoc, xslArgs, writer);  
  68.             }  
  69.             catch 
  70.             {  
  71.                 throw new Exception("请加自己的处理异常程序");  
  72.             }  
  73.         }  
  74.     }  
  75.     public class PageBar : System.Web.UI.HtmlControls.HtmlControl  
  76.     {  
  77.         public int PageNum{get;set;}  
  78.         public int PageSize { getset; }  
  79.         public int PageCount { getset; }  
  80.         public string BaseUrl{get;set;}  
  81.         protected override void Render(HtmlTextWriter writer)  
  82.         {  
  83.             writer.Write(string.Format("< a href={0}?PageNum=1>第一页< /a>|< a href={0}?PageNum={1}>上一页< /a>|< a href={0}?PageNum={2}>下一页< /a>|< a href={0}?PageNum={3}>尾页< /a>  (共{4}当前页{5})", BaseUrl, PageNum - 1 > 0 ? PageNum - 1 : 1, PageNum + 1 > PageCount ? PageCount : PageNum + 1, PageCount, PageCount, PageNum));  
  84.         }  
  85.     }  

C#程序中的数据显示:页面定义

  1. < %@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %> 
  2. < %@Register   TagPrefix="CS" Namespace="WebApplication1.Control"  Assembly=" WebApplication1" %> 
  3. < !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd "> 
  4.  
  5. < html xmlns="http://www.w3.org/1999/xhtml " > 
  6. < head runat="server"> 
  7.     < title>< /title> 
  8. < /head> 
  9. < body> 
  10.     < CS:EmList SerialObject="< %#List%>" XslFile="XSL/test.xslt" runat="server" />< br /> 
  11.     < CS:PageBar PageNum="< %#PageNum%>"  BaseUrl="< %#Request.Path%>" PageCount="5" runat="server" /> 
  12. < /body> 
  13. < /html>  

C#程序中的数据显示:其中List和PageNum为页面属性

XSLT:

  1. < xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform " version="1.0" xmlns:Encoding="urn:Encoding"> 
  2.  < xsl:output method="text" /> 
  3.  < xsl:template match="/"> 
  4.  < h2> 
  5.   < xsl:for-each select="ArrayOfEmployeeEntity/EmployeeEntity"> 
  6.  < ![CDATA[< a href="http://www.csdn.net/Employee.aspx?ID=]]>< xsl:value-of select="Encoding:Encode ( EmployeeID)"/>< ![CDATA[" alt="]]>< xsl:value-of select= "Encoding:Encode(Full_Name)"/>< ![CDATA[">< br/>]]>< xsl:value-of select"Encoding:Encode(Email_Address)"/>< /xsl:for-each> 
  7.  < /h2> 
  8.  < /xsl:template> 
  9. < /xsl:stylesheet>  

以上就是通过自定义标签和XML、XSL实现C#程序中数据的显示,希望对大家有所帮助。

【编辑推荐】

  1. C#自定义控件的开发:Pin和Connector
  2. 比较C#自定义控件的property(属性)和/attribute(性质)
  3. C#组件开发:COM和.NET对象之间的互操作
  4. 介绍.NET平台、C#和ASP.NET
  5. C# Attributes:定义设计期信息
责任编辑:book05 来源: csdn
相关推荐

2009-08-28 17:45:19

C#自定义数据

2009-08-04 09:56:46

C#事件处理自定义事件

2009-08-04 08:58:01

C#自定义特性

2009-08-03 14:46:12

C#自定义控件

2009-08-04 12:56:51

C#自定义事件

2009-09-03 15:46:57

C#自定义事件

2009-09-11 11:04:23

C# WinForm自

2009-08-03 13:34:06

自定义C#控件

2009-08-03 13:39:46

C#自定义用户控件

2009-08-04 13:31:35

C#自定义事件

2013-04-01 14:35:10

Android开发Android自定义x

2009-08-05 17:03:37

C#自定义控件

2021-06-17 06:52:37

C#自定义异常

2009-08-04 13:07:46

C#自定义快捷键

2009-08-17 17:24:02

C#自定义消息框

2009-08-03 14:42:50

C#自定义控件

2009-08-03 13:32:38

C#自定义组件

2009-08-12 14:53:50

C#类型转换函数

2009-08-04 12:40:34

c#自定义事件

2012-02-02 13:45:28

JavaJSP
点赞
收藏

51CTO技术栈公众号