所以我正在做客户端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,主页知道在名称约定上再次提供它。它太大了,无法发帖。
答案 0 :(得分:1)
如果页面的唯一目的是呈现XML,那么使用HTTPHandler可能会好得多。
实际上,您可以使用同名的虚拟页面替换现有的物理页面。您可以生成XML,对其进行转换,然后将其发送回客户端,而不必担心aspx管道。
如果您需要使用会话状态,您可以在处理程序中实现System.Web.SessionState.IRequiresSessionState,并且会话状态将在请求中提供。