重载页面以处理不同的浏览器类型

时间:2011-12-31 19:55:12

标签: c# asp.net xml

所以我正在做客户端XSL转换。

如果有人请求Dashboard.aspx,它将创建所有XML数据,并按照惯例在XML中包含对DashboardXSL.aspx的引用。然后,这将通过客户端发送并创建XHTML。

我所有提供XML的aspx页面都是从XMLPage而不是Page派生的,现在我只是在Page_PreLoad上设置内容类型。在实际的Page_Load上,页面的所有数据都在ITS Page_Load上收集,然后通过<%= XMLData%>

写入页面。

我想做的是在这个过程的某个阶段,我猜测我的XMLPage子类Page_Render [或PreRender]拦截所有累积的XML并进行服务器端转换并阻止页面作为asp传递.net通常会提供它。

有谁知道怎么做?

提前致谢! 这是我的XMLPage类 我包含了一些代码,所以你有一些可视化的东西

        public class XMLPage : System.Web.UI.Page
    {
        protected void Page_PreLoad(object Sender, EventArgs e)
        {
            Response.ContentType = "text/xml";
            if (Request.Browser.IsBrowser("IE"))
            { //Just testing this out, not production code ! :p

                    Response.Write(@"<?xml 
version=""1.0"" encoding=""ISO-8859-1""?>
<oohru>Browser is IE</oohru>");
                    Response.End();
                    Response.Flush();
                }
            }
        }

这是Dashboard.aspx

    <%@ Page Title="Oohru Dashboard" Language="C#"  AutoEventWireup="true" 
EnableViewState="false"
    CodeBehind="Dashboard.aspx.cs" Inherits="OohruWeb.Dashboard"
 MasterPageFile="~/MasterPages/LoggedInXML.Master" %>
<asp:Content ContentPlaceHolderID="XMLPageData" runat="server">
    <%=DashboardBlogs%>
</asp:Content>

这是Dashboard.aspx.cs背后的代码

    public partial class Dashboard : OohruWeb.PageOverloads.XMLPage
    {
        public string DashboardBlogs="";
        protected void Page_Load(object sender, EventArgs e)
        {
            DbaseExecSpWithRecordset Sproc = new DbaseExecSpWithRecordset();
            Sproc.SetSp("sproc_GetBlogPostsForDashboard");
            Sproc.AddParam("UserID", System.Data.SqlDbType.UniqueIdentifier, 
(Guid)Membership.GetUser().ProviderUserKey);
            SqlDataReader Dreader = Sproc.Execute();
            while (Dreader.Read())
            {
                DashboardBlogs += Dreader[0].ToString();
            }
            Dreader.Close();
            Sproc.Close();
            Sproc = null;

        }

XSL文件是DashboardXSL.aspx,主页知道在名称约定上再次提供它。它太大了,无法发帖。

1 个答案:

答案 0 :(得分:1)

如果页面的唯一目的是呈现XML,那么使用HTTPHandler可能会好得多。

实际上,您可以使用同名的虚拟页面替换现有的物理页面。您可以生成XML,对其进行转换,然后将其发送回客户端,而不必担心aspx管道。

如果您需要使用会话状态,您可以在处理程序中实现System.Web.SessionState.IRequiresSessionState,并且会话状态将在请求中提供。