私はクライアント側のXSL変換を行っています。異なるブラウザの種類を処理するオーバーロードページ
誰かがDashboard.aspxをリクエストすると、すべてのXMLデータが作成され、慣習的にXMLのDashboardXSL.aspxへの参照が含まれます。これは、クライアント上で送信され、XHTMLを作成します。
XMLに対応するすべてのaspxページは、PageではなくXMLPageから派生していますが、今はPage_PreLoadにコンテンツタイプを設定しています。実際のPage_Loadでは、ページのすべてのデータがITS Page_Loadに集められており、ページには<%= XMLData%>
で書かれています。私がやりたいことは、私は自分のXMLPageサブクラスを推測しているPageRender [またはPreRender]は、蓄積されたすべてのXMLを傍受し、サーバー側の変換を行い、asp.netが通常提供するようにページが配信されるのを止めます。
誰でもこれを行う方法を知っていますか?
ありがとうございます!ここ はあなたがここに
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();
}
}
}
を視覚化するために何かを持っているので、私はいくつかのコードを含めています私のXMLPageクラス ある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です。マスターページでは、この名前を再度指定することができます。投稿するのが大変です。
Hrm。その時点で、MVCを使用するだけでいいですか?私はちょうどコントローラがXMLを返すようにすることができます。 Webformsを完全に放棄するなら、そのアーキテクチャーは自然にそのようなものに向いているように思えます。[とにかくウェブフォームの機能をほとんど使用しません] ありがとう! – Jordan
@Jordan:いずれのアプローチもあなたのニーズに対応するはずだと思うが、HTTPHandlerがはるかに少なくて済むと思う。 –
FYIと同じように、ページレンダリングの仕組みが過負荷になってしまいました。このように、ここでは少しコードがあります。 'protected override voidレンダリング(HtmlTextWriterライター) { StringBuilder sb = new StringBuilder(); StringWriter sw =新しいStringWriter(sb); HtmlTextWriter hWriter =新しいHtmlTextWriter(sw); base.Render(hWriter); string XMLOutput = sb.ToString(); if(!Request.Browser.IsBrowser( "IE")) writer.Write(XMLOutput); ' それ以外の場合は変換して返します。 – Jordan