2009-05-22 85 views
0

我已經在一個問題上工作了幾個小時了。 我想創建動態的Javascripts,當我需要的時候加載到頁面中。 這是一個基於Ajax技術的項目。首先,我嘗試通過PageMethods來完成它,但由於視圖狀態和其他事情的緣故,PageMethods只能是靜態的。問題在於我無法針對頁面對象或任何其他控件進行編程,因爲該方法是靜態的。停止頁面進程

我的下一個想法是,我有一個更新面板,在這個面板中我有一個隱藏的字段,我存儲我的腳本。我觸發hiddenfield通過javascript做回傳。 在Page_Init我檢查它是否是一個異步回發,如果它是造成它的隱藏字段。如果是這樣,我註冊我的新腳本。

現在來解決問題。發生這種情況時,我不想在頁面生命週期中繼續前進。我做完。我不希望Page_Load運行和Pre_Render等。我該如何實現這一目標? Response.End()會停止頁面的進程,但顯然我的腳本沒有註冊。

好吧我可以檢查每種方法,如果它是一個asynchrounos回發,如果它是導致它的隱藏字段,但我想建立這個基礎頁面類,所有頁面將繼承。我希望它儘可能通用。

任何想法?如果有人能幫助我,我將不勝感激。謝謝。 /約翰

回答

1

你不想運行的方法是事件處理程序。只要你沒有結束迴應,那些事件就會發生。這是aspx頁面如何工作的基本部分,它觸發了事件。

如果在事件處理程序代碼,您不想運行,那麼您可以:

在page_init -set一個標誌,然後檢查該標誌在你的事件處理程序 - 嘗試解除你的頁面事件(這是一個糟糕的主意,並會打破進一步的回傳)

我懷疑你真的想要做什麼是創建一個自定義處理程序,返回你的JavaScript和從你的加載JavaScript調用。

所以你有一個叫做MyJavascriptGenerator.ashx的處理程序,你有隱藏的javascript調用該頁面而不是回發到相同的aspx頁面。

沒有關於頁面預期行爲的更多細節,這就是我能想到的。

0

ASPXpage:

function Generate() { 
     __doPostBack('hdJS', 'function SayHello(){alert(\'Hello to you\')}'); 
    } 

    function Execute() { 
     SayHello(); 
    } 

</script> 



代碼隱藏:

使用系統; using System.Collections.Generic;使用System.Linq的 ; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls;

命名空間Web應用程序 { 公共部分類_Default:System.Web.UI.Page { 保護無效Page_Init(對象發件人,EventArgs的) { 如果(ScriptManager1.IsInAsyncPostBack) { 如果(請求[ 「__EVENTTARGET」] ==「hdJS」) ScriptManager.RegisterClientScriptBlock(hdJS,hdJS.GetType(),「key」,Request [「__ EVENTARGUMENT」],true); } }

protected void Page_Load(object sender, EventArgs e) 
    { 
    } 
} 

}

那是一個代碼示例。你會如何將它轉換成一個漫步者。 正如我所能想到的,我需要以某種方式回發相同的頁面以在頁面中注入JavaScript,對吧? 頁面已經加載,我不想重新加載它。這是主要目標。好吧,我可以像更新面板一樣使用局部頁面渲染器重新加載它,但這意味着整個頁面生命週期會再次執行,並且只有面板內的部分會更新,但仍會對所有控件進行初始化,並重新處理所有代碼。我想避免這種情況。 如何用HttpHandler實現這一點? /約翰

+0

查找:^,替換4倍空間,檢查正則表達式 - >會給你正確的代碼格式 – 2009-05-23 11:50:42