2011-07-26 82 views
1

我從一個HttpHandler的渲染一個自定義用戶控件像這樣:動態呈現UserControl時,如何使其使用當前會話?

public void ProcessRequest(HttpContext context) 
{ 
    context.Response.ContentType = "text/plain"; 
    string workName = context.Request.QueryString["name"]; 
    string workForm = RenderView("~/work/" + workName + ".ascx"); 
    context.Response.Write(workForm); 
} 

public static string RenderView(string path) 
{ 
    Page pageHolder = new Page(); 
    UserControl viewControl = (UserControl)pageHolder.LoadControl(path); 
    pageHolder.Controls.Add(viewControl); 
    StringWriter result = new StringWriter(); 
    HttpContext.Current.Server.Execute(pageHolder, result, false); 
    return result.ToString(); 
} 

的問題是,所呈現的頁面生成一個新的會話。 (通過比較呈現的HTML的會話ID與當前會話ID,我可以知道)

如何讓動態頁面使用當前會話?

注意:該代碼不在登錄後面,但將在未來。是否有任何問題需要記住,例如提供會話和auth cookie等?

+1

我不得不給你+1,因爲這個問題更好地回答了我的問題,關於如何動態加載UserControl並將其轉換爲字符串比任何其他答案。我幾乎寫下了這個問題,直到我回答你的問題。 RenderView()函數是將UserControls轉換爲字符串的一個很好的例子。謝謝。 – RacerNerd

回答

0

確保您的HttpHandler實現標記接口​​。

+0

謝謝!這對我來說是一個sma moment的時刻:) –

相關問題