[英]Mysterious postback issues with javascript (asp.net)
我顯示了一個使用javascript的modalpopupextender,當我單擊其“保存”按鈕時,它將保存我輸入的內容,並(作為其按鈕)自動回發,以便頁面刷新。
但是,當刷新時,出現錯誤,因為它說我在aspx頁面上定義的復選框控件為空。
頁面加載時,我要做的第一件事是創建一些JavaScript,並為我的組件輸入各種clientID,最后要添加的是chkFullyBooked.ClientID。
頁面首次加載時可以,但是在發回頁面后,我的復選框為空。
另一個問題是,在我的“保存”按鈕功能中,雖然它可以獲取代碼中文本框和復選框的值,但它無法從已更改的標簽中獲取文本……我通過將標簽轉換為文本框來解決了這個問題。
我只是無法弄清楚復選框控件(與其他文本框一起硬編碼到我的頁面中)在頁面刷新時返回為null的原因。
我的aspx頁面頂部的代碼:
<% Response.Write("<script language='javascript' type='text/javascript'>" +
"function DisplayModalPopup(dateCreated, note, editedBy, fullybooked) {" +
"var modalDialog = $find('AddressErrorPopup');" +
"document.getElementById('" + txtNote.ClientID + "').value = note;" +
"if (modalDialog != null) { modalDialog.show(); }" +
"var lblLastEditBy = document.getElementById('" + txtLastEditBy.ClientID + "');" +
"lblLastEditBy.value = editedBy;" +
"var lblDateCreated = document.getElementById('" + txtTallyBoardEntryDate.ClientID + "');" +
"lblDateCreated.value = dateCreated;" +
"var fullyBooked = document.getElementById('" + chkFullyBooked.ClientID + "');" +
"fullyBooked.value = fullybooked;" +
"} " +
"</script>"); %>
稍后在我的代碼中,摘錄:
.
.
.
<tr>
<td colspan="2" style="text-align:left">Last Edit by - <asp:TextBox ID="txtLastEditBy" ReadOnly="true" runat="server"></asp:TextBox></td>
</tr>
<tr><td colspan="2" style="text-align:left"><asp:CheckBox runat="server" ID="chkFullyBooked" Text="Fully Booked?" Checked="false"/></td></tr>
.
.
.
編輯:這當然意味着我在上面的代碼中獲得了空引用異常,因為它無法訪問ClientID。
編輯:作為cr腳的修復程序,我做了response.redirect(request.url.tostring)而不是讓按鈕回發本身,並且出於某些不可思議的原因,此方法工作正常。
由於您在運行時通過Javascript對文本/復選框的值進行了“硬編碼”,因此ViewState不了解這些值的設置,因此刷新或回發后它們將保持空白。
您會注意到Response.Redirect確實保留了您的值,因為在調用基於服務器的方法時,它會遍歷所有表單字段並收集其值以存儲在ViewState中,並在從服務器請求返回時重新填充它們。
您是否曾嘗試在用戶首次訪問頁面時通過Page_Load函數加載初始值? 這將確保在基於模式彈出操作執行操作時,將值存儲在ViewState中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.