[英]Referencing inline scripts from update panels in ASP.NET
我正在嘗試解決在更新面板中使用內聯腳本的問題。 我通常可以通過使用Sys.Application.add_load()或使用ScriptManager創建RegisterStatupScript()腳本來解決此問題。 但是,在這種情況下,兩種解決方案都不起作用。
這是問題所在。
asp.net(在本例中為SharePoint)頁面上的“更新”面板:
<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
<ContentTemplate>
<asp:Button ID="Button1" runat="server" Text="Load" />
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
</ContentTemplate>
</asp:UpdatePanel>
可以說,在后面的代碼中,當單擊按鈕時,我們向占位符添加了一個用戶控件。
protected void Button1_Click(object sender, EventArgs e)
{
MyControl ctrl = new MyControl();
PlaceHolder1.Controls.Clear();
PlaceHolder1.Controls.Add(ctrl);
UpdatePanel1.Update();
}
最后,假設我們的用戶控件包含一些內聯腳本。
<script type="text/javascript">
var myInt = 1;
alert(typeof myInt);
</script>
將以上內容放在一起並運行它將導致一個默認情況下為空的更新面板(按鈕除外)-單擊該按鈕時,將獲得一些類似於上面的javascript的數據。 問題是上面的javascript代碼永遠不會觸發 。
在我的現實生活中,用戶控件並不十分復雜-加載控件時,它會填充一個轉發器,然后再插入一些內嵌JavaScript,從而稍微改變轉發器數據。 數據通過,但是javascript從未執行且不會引發任何錯誤。
嘗試的解決方案:將內聯javascript包裝在名為initMyCode()的函數中,然后使用:
ScriptManager.RegisterStartupScript(this, this.getType(), UniqueID, "initMyCode()", true);
...關於用戶控制頁面加載事件。 由於在頁面內找不到initMyCode(),因此失敗。
有人對此問題有可行的解決方案嗎?
if(!Page.ClientScript.IsStartupScriptRegistered("initMyCode")){
string script =@"function initMyCode(){var myInt = 1;
alert(typeof myInt);}
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(initMyCode);"
ScriptManager.RegisterStartupScript(this, this.getType(), initMyCode, script, true);
}
要么
<script type="text/javascript">
function initMyCode(){
var myInt = 1;
alert(typeof myInt);}
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(initMyCode);
</script>
您是否已經嘗試過將代碼添加到jQuery的“ ready”中?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.