我使用javascript显示一个modalpopupextender,当我点击它的保存按钮时,它会保存我输入的内容,并且(作为一个按钮)自动回发以便页面刷新。
然而,当它刷新时,我收到一个错误,因为它说我在我的aspx页面上定义的复选框控件是null。
页面加载时我做的第一件事就是创建一些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。
编辑:作为一个糟糕的修复,我做了response.redirect(request.url.tostring),而不是让按钮回发本身,这对于一些荒谬的理由工作正常..
答案 0 :(得分:0)
由于您在运行时通过Javascript“硬编码”文本/复选框的值,因此ViewState不知道这些值是否已设置,因此在刷新或回发后它们将保持空白。
您会注意到Response.Redirect确实保留了您的值,因为在调用基于服务器的方法时,它会遍历所有表单字段并收集它们的值以存储在ViewState中,并在它从它返回时重新填充它们服务器请求。
您是否尝试在用户第一次到达页面时通过Page_Load功能加载初始值?这将确保在根据模态弹出操作执行操作时,值存储在ViewState中。