【问题标题】:Mysterious postback issues with javascript (asp.net)javascript (asp.net) 的神秘回发问题
【发布时间】:2009-10-19 15:42:49
【问题描述】:

我使用 javascript 显示了一个 modalpopupextender,当我点击它的保存按钮时,它会保存我输入的内容,并(作为它的一个按钮)自动回发,以便页面刷新。

但是当它刷新时,我收到一个错误,因为它说我在我的 aspx 页面上定义的复选框控件为空。

页面加载时我做的第一件事是创建一些 javascript 并为我的组件提供各种 clientID,最后要添加的是 chkFullyBooked.ClientID。

当页面第一次加载时,它是好的,但是在回发后它说我的复选框是空的。

另一个问题是,在我的保存按钮功能中,虽然它可以检索文本框的值和代码中的复选框,但它无法从已更改的标签中获取文本...我通过将标签转换为文本框来解决这个问题不过。

我只是无法弄清楚为什么复选框控件(与其他文本框一起硬编码到我的页面中)会在页面刷新时返回为空。

我的 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) 而不是让按钮回发本身,这出于某种天谴的原因工作正常..

【问题讨论】:

    标签: asp.net javascript


    【解决方案1】:

    由于您在运行时通过 Javascript 对文本/复选框的值进行“硬编码”,因此 ViewState 不知道这些值被设置,因此在刷新或回发后它们将保持空白。

    您会注意到 Response.Redirect 确实保留了您的值,因为当调用该基于服务器的方法时,它会遍历所有表单字段并收集它们的值以存储在 ViewState 中,并在返回时重新填充它们服务器请求。

    您是否尝试在用户第一次到达页面时通过 Page_Load 函数加载初始值?这将确保在根据模式弹出操作执行操作时将值存储在 ViewState 中。

    【讨论】:

    • 这对于保留值是有意义的,但这里的问题是复选框本身返回为空......好像控件不存在,这是不可能的......跨度>
    猜你喜欢
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 2012-01-22
    相关资源
    最近更新 更多