產生回傳的用戶端指令碼
只有兩個 HTML 表單項目 (按鈕和影像按鈕) 會造成表單回傳。如果您的自訂控制項呈現不會產生回傳的 HTML 項目 (例如文字方塊或連結按鈕),而您想要控制項啟始回傳,您可以在 ASP.NET 中透過依賴用戶端指令碼 (JScript、JavaScript) 的事件架構來為此撰寫程式。
控制項開發人員需要對他們的控制項做一些小幅變更,以啟用這個回傳機制。下列程式片段示範 (以粗體) 程式碼,它必須加入至控制項的 Render 方法來啟始回傳。
protected override void Render(HtmlTextWriter output) {
output.Write("<a id=\"" + this.UniqueID + "\" href=\"javascript:" + Page.GetPostBackEventReference(this) +"\">");
output.Write(" " + this.UniqueID + "</a>");
}
[Visual Basic]
Protected Overrides Sub Render(output As HtmlTextWriter)
output.Write("<a id=""" & Me.UniqueID & _
""" href=""javascript:" & _ Page.GetPostBackEventReference(Me) & """>")
output.Write(" " & Me.UniqueID & "</a>")
End Sub
GetPostBackEventReference 方法會發出啟始回傳的用戶端指令碼,並且也提供啟始回傳事件的控制項的參考。
若要瞭解 GetPostBackEventReference 方法所做的,請編譯下一章節使用用戶端指令碼回傳範例中的程式碼,並要求您瀏覽器中附帶的 .aspx 網頁。如果您使用您瀏覽器的 [檢視原始檔] 命令來檢視呈現的網頁的原始檔,您將會看到下列 HTML 和指令碼 (表單的 name 和 id 屬性的實際值會有不同,而隱藏變數的 value 屬性也如此)。
<html>
<body>
<form name="ctrl2" method="POST" action="MyLinkButton.aspx" id="ctrl2">
<input type="hidden" name="__EVENTTARGET" value="" /><input type="hidden" name="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" value="dDwtMjI1NTgwNDE2Ozs+eIZ+AfRvoCj1nWimbh+zPv/rKNg=" />
Here is the custom link button.<br>
<a id ="Link" href="javascript:__doPostBack('Link','')"> Link</a>
<br><br>
<input name="TextBox" type="text" value="Click the link" id="TextBox" style="background-color:Cyan;width:200px;" />
<br>
<script language="javascript"><!-- function __doPostBack(eventTarget, eventArgument) { var theform = document.ctrl2 theform.__EVENTTARGET.value = eventTarget theform.__EVENTARGUMENT.value = eventArgument theform.submit() }// --></script>
</form>
</body>
</html>
這個範例中粗體的項目 - 兩個隱藏欄位和用戶端指令碼方法 - 為 ASP.NET 網頁架構所加入的。隱藏表單欄位指示要張貼至哪個伺服器控制項,並選擇性指定要傳遞的引數。用戶端指令碼方法被用來設定隱藏欄位,並致使表單被送出至伺服器。如需完整範例,請參閱使用用戶端指令碼回傳範例。