2011-12-31 19 views
0

私はクライアント側の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です。マスターページでは、この名前を再度指定することができます。投稿するのが大変です。

答えて

1

ページの唯一の目的がXMLのレンダリングである場合は、HTTPHandlerを使用する方がはるかに良いかもしれません。

実際、既存の物理ページを同じ名前の仮想ページに置き換えることができます。 aspxパイプラインについて心配することなく、XMLを生成し、変換し、それをクライアントに返すことができます。

セッション状態で作業する必要がある場合は、ハンドラにSystem.Web.SessionState.IRequiresSessionStateを実装するだけで、要求にセッション状態が使用できるようになります。

+0

Hrm。その時点で、MVCを使用するだけでいいですか?私はちょうどコントローラがXMLを返すようにすることができます。 Webformsを完全に放棄するなら、そのアーキテクチャーは自然にそのようなものに向いているように思えます。[とにかくウェブフォームの機能をほとんど使用しません] ありがとう! – Jordan

+0

@Jordan:いずれのアプローチもあなたのニーズに対応するはずだと思うが、HTTPHandlerがはるかに少なくて済むと思う。 –

+0

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

関連する問題