2009-10-19 75 views
0

我使用javascript展示了一个modalpopupextender,当我点击它的保存按钮时,它保存了我输入的内容,并且(作为它的一个按钮)自动回发,以便页面刷新。用JavaScript(asp.net)神秘回发问题

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

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

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

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

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

<% 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> 
. 
. 
. 

编辑:当然,这意味着我得到一个空引用异常就在我的aspx页面的顶部

代码上面的代码,因为它不能访问ClientID。

编辑:作为一个蹩脚的修复我做的Response.Redirect(request.url.tostring),而不是让该按钮回传本身,这对于一些荒凉的原因,工作正常..

回答

0

既然你是“硬编码“文本/复选框的值在运行时通过JavaScript,ViewState不知道这些值被设置,所以他们将在刷新或回发后保持空白。

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

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

+0

这对于保留值是有意义的,但是这里的问题是复选框本身回到空值......就好像控件不存在一样,这是不可能的... – NibblyPig 2009-10-27 16:18:27