簡體   English   中英

如何從 ASPX 控制事件中調用 Javascript function?

[英]How do you call a Javascript function from an ASPX control event?

如何從 ASPX 控制事件中調用 Javascript function?

具體來說,我想從 DropDownList 的 SelectedIndexChanged 事件中調用 function。

每次看到這種問題我都會有點緊張,因為十有八九這意味着提問者並不真正理解發生了什么。

當您的 SelectedIndexChanged 事件在服務器上觸發時,它會作為完整回發的一部分觸發。 這意味着要運行該代碼,您的頁面加載代碼的整個 rest 也必須運行。

不僅如此,該代碼作為來自瀏覽器的新 http 請求的結果運行。 就瀏覽器而言,結果中將返回一個全新的頁面。 舊頁面和舊 DOM 被丟棄。 因此,在您的 SelectedIndexChanged 事件代碼運行時,您想要調用的 javascript function 甚至不存在於瀏覽器中。

那么該怎么做呢? 你有幾個選擇:

  • 更改頁面,使控件根本不會回發到服務器。 在客戶端完全檢測 javascript 中的變化。 這是我的首選選項,因為它避免了瀏覽器頁面中奇怪的加載腳本,並為您的服務器節省了工作量。 不利的一面是它使您的頁面依賴於 javascript,但這並不是什么大問題,因為如果禁用 javascript,這從一開始就注定要失敗。
  • 使用 ClientScript.SetStartupScript() 將您想要的 javascript 設置為在 SelectedIndexChanged 事件中運行 onload。
  • 將 javascript 的預期結果應用於頁面的服務器模型。 這具有即使在 javascript 關閉(可訪問性)時也能正常工作的優勢,但代價是在服務器上做更多工作,花費更多時間推理頁面的邏輯 state,並且可能需要復制客戶端和服務器端邏輯。 此外,此事件無論如何都取決於 javascript:如果 javascript 被禁用,它將不會觸發。
  • 第一個和第三個選項的某些組合也是可能的,例如它在本地使用 javascript 如果可用,但如果沒有則回發到服務器。 就我個人而言,我希望看到對 ASP.Net 中內置的更好、更直觀的支持。 但再說一遍:我說的是一般情況。 此特定事件需要 javascript 才能正常工作。

正如 Muerte 所說,您只需將 javascript 或從后面的代碼調用到頁面上即可。 我個人使用這個:

ClientScript.RegisterClientScriptBlock("customscript", "<script>simple script here</script>")

如果您在頁面上已經有一個更復雜的而不是我擁有的東西,您可以調用 function。

您不能直接從事件中執行此操作,因為 ASPX 控件事件是服務器端的。

您可以做的是在 ASPX 事件中發出 Javascript,該事件將在頁面重新加載時調用 JavaScript function。

例如,如果在您的 ASPX 頁面中有一個名為“DoSomething()”的 Javascript function,則在您的 ASPX 控件事件中添加以下內容:

protected void btnSubmit_Click(object sender, EventArgs e)
{
    Page.ClientScript.RegisterStartupScript(this.GetType(), "myEvent", "DoSomething()", true);
}

最后一個 boolean 參數定義自動添加標簽。

在后面的代碼中,通過屬性集合將一些標記附加到服務器端控件。 這假設 function 已經在頁面可用的客戶端腳本文件中。

MyServerDDLControl.Attributes.Add("SelectedIndexChanged", "MyClientSideFunction();");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM