input hidden 单击按钮后,保存数据还在与丢失

亮术网 2017-10-18 本网原创

  在网站开发过程中,有时需要在客户端暂时保存数据。例如:动态绑定的 select 下拉选择框,单击按钮 button 前,用户已经选择了一项,单击按钮后,select 的所有选项以及用户所选择的项都不见了,此时就需要把这些数据暂时保存在客户端,以恢复 select 在单击前的状态,否则用户提交表单时,select 选项为空而造成提交数据的错误。

  在客户端暂时保存数据,通常用 input hidden,有意思的是:如果不把 input 设置为在服务端运行,侧单击按钮前保存的数据在单击按钮后丢失了;反之,则所保存数据还在,下面看具体的实例。

 

  一、数据丢失的情况

  不设置 input type="hidden" 在服务器端运行时,单击把 CausesValidation 属性设置为 false 的按钮后,input 在单击按钮前所保存的数据丢失,代码如下:

  <asp:DropDownList ID="ddlClass" runat="server" /><asp:DropDownList ID="ddlSecondClass" runat="server" onchange="tempSave.value = this.options[this.options.selectedIndex].value;"><asp:ListItem Value="0" Text="请选择" /></asp:DropDownList>

  <input type="hidden" id="tempSave" />
  <asp:Button ID="btnUpload" Text="上 传" runat="server" OnClick="btnUpload_Click" CausesValidation="false" />

 

  代码实现的功能大概为:

  打开页面时绑定大类,当用户选择大类后根据大类ID绑定该类的二级类,也就是动态绑定二级类。这样单击“上传”按钮后问题来了,动态绑定的二级类和用户选择的二级类都丢失了,所以需要把二级类的选项和用户的选择暂时保存到客户端(即保存到 input),当上传后再把这些数据复原,以确保不出错。

 

 

  二、数据还在的情况

  只需把上面的 <input type="hidden" id="tempSave" /> 改为:

  <asp:HiddenField ID="tempSave" runat="server" />

  单击上传按钮后,数据就不会丢失,即把 input 设置为在服务器端运行。这种情况在实际中已经得到验证,并应用于网站。

本文浓缩标签:inputhiddenjs