通过在C#程序中定义标签类,然后在页面进行数据绑定,从而实现数据和显示的分离,显示的样式采用XSL定义。数据实体通过序列化为XML,然后用XSL解析,形成HTML内容。对于其中需要实现安全特性,防范XSS攻击,采用XSL自定义FUNCTION进行ENCODE。
C#程序中的数据显示实现代码
- public class Encoding
- {
- public string Encode(string cSource)
- {
- return System.Web.HttpUtility.HtmlEncode(cSource);//可以使用Microsoft XSS LIB
- }
- }
- public class EmList : Label
- {
- public override bool EnableViewState
- {
- get{ return false;}
- }
- public string XslFile{get;set;}
- public object SerialObject{get;set;}
- protected override void Render(HtmlTextWriter writer)
- {
- if (SerialObject == null)
- {
- throw new Exception("对象未初始化");
- }
- System.Xml.Serialization.XmlSerializer oSerial = new System.Xml.Serialization.XmlSerializer(SerialObject.GetType());
- System.Text.StringBuilder oSb = new System.Text.StringBuilder();
- System.IO.StringWriter oWr = new System.IO.StringWriter(oSb);
- string Xml = "";
- oSerial.Serialize(oWr, SerialObject);
- Xml =oSb.ToString();
- string cXslFileName = this.MapPathSecure(XslFile);
- if (!System.IO.File.Exists(cXslFileName))
- {
- throw new Exception("请加自己的处理异常程序");
- }
- System.Xml.Xsl.XsltArgumentList xslArgs = new System.Xml.Xsl.XsltArgumentList();
- Encoding oEn = new Encoding();
- xslArgs.AddExtensionObject("urn:Encoding", oEn);
- System.Xml.XmlDocument oDoc = new System.Xml.XmlDocument();
- try
- {
- oDoc.LoadXml(Xml);
- }
- catch
- {
- throw new Exception("请加自己的处理异常程序");
- }
- System.Xml.Xsl.XslCompiledTransform oTran = new System.Xml.Xsl.XslCompiledTransform();
- string cXsl = "";
- try
- {
- cXsl = System.IO.File.ReadAllText(cXslFileName);
- }
- catch
- {
- throw new Exception("请加自己的处理异常程序");
- }
- System.IO.StringReader oSr=new System.IO.StringReader(cXsl);
- System.Xml.XmlReader oRe=System.Xml.XmlReader.Create(oSr);
- try
- {
- oTran.Load(oRe);
- }
- catch
- {
- throw new Exception("请加自己的处理异常程序");
- }
- try
- {
- oTran.Transform(oDoc, xslArgs, writer);
- }
- catch
- {
- throw new Exception("请加自己的处理异常程序");
- }
- }
- }
- public class PageBar : System.Web.UI.HtmlControls.HtmlControl
- {
- public int PageNum{get;set;}
- public int PageSize { get; set; }
- public int PageCount { get; set; }
- public string BaseUrl{get;set;}
- protected override void Render(HtmlTextWriter writer)
- {
- 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));
- }
- }
C#程序中的数据显示:页面定义
- < %@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
- < %@Register TagPrefix="CS" Namespace="WebApplication1.Control" Assembly=" WebApplication1" %>
- < !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
- < html xmlns="http://www.w3.org/1999/xhtml " >
- < head runat="server">
- < title>< /title>
- < /head>
- < body>
- < CS:EmList SerialObject="< %#List%>" XslFile="XSL/test.xslt" runat="server" />< br />
- < CS:PageBar PageNum="< %#PageNum%>" BaseUrl="< %#Request.Path%>" PageCount="5" runat="server" />
- < /body>
- < /html>
C#程序中的数据显示:其中List和PageNum为页面属性
XSLT:
- < xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform " version="1.0" xmlns:Encoding="urn:Encoding">
- < xsl:output method="text" />
- < xsl:template match="/">
- < h2>
- < xsl:for-each select="ArrayOfEmployeeEntity/EmployeeEntity">
- < ![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>
- < /h2>
- < /xsl:template>
- < /xsl:stylesheet>
以上就是通过自定义标签和XML、XSL实现C#程序中数据的显示,希望对大家有所帮助。
【编辑推荐】