javascript – 通过客户端脚本更改时访问服务器端的Readonly Textbox值的变通方法

我在网格视图的每一行都有一个日期文本框.由于不允许用户在文本框中放置自己的值,因此我们将属性设置为ReadOnly =“true”.并提供了一个日历java脚本插件,用于设置Textbox值.现在,当我尝试在保存单击时访问日期文本框时,文本框值不会保留.

我也知道这个问题和解决方案.我们需要在服务器端设置readonly属性来解决此问题.但我最关心的是,我已将Textbox放在Grid视图的Template字段中.所以我需要循环遍历Grid视图的每一行,然后获取日期Textbox的引用,然后将readonly属性设置为readonly.看起来很麻烦.任何人都可以建议其他替代方案或解决方法.

代码如下

<asp:GridView ID="gv_sample" runat="server" AutoGenerateColumns="false">
 <Columns>
   <asp:TemplateField>
     <ItemTemplate>
      <table cellpadding="0" cellspacing="0" border="0">
       <tr>
        <td>
         <asp:TextBox runat="server" ID="txtByWhen" ReadOnly="true" CssClass="inputbox" Text='<%#Eval("ByWhen") %>'></asp:TextBox>
       </td>
        <td style="padding-left: 2px;">
         <img src="../Images/dateico.gif" alt="Select a date" title="Select a date" 
         onclick="JavaScript:return showCalendar('<%#((GridViewRow)Container).FindControl("txtByWhen").ClientID %>','dd/mm/y');" />
      </td>
     </tr>
    </table>
   </ItemTemplate>
  </asp:TemplateField>
 </Columns>
</asp:GridView>

解决方法:

你是对的,解决方案是在Codebehind中设置属性. (见this question)

您不必遍历GridView,只需在RowCreated-Event中执行:

protected void Page_Load(object sender, EventArgs e)
{
    gv_sample.RowCreated += new GridViewRowEventHandler(gv_sample_RowCreated);
}

void gv_sample_RowCreated(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        TextBox txtByWhen = (TextBox)e.Row.FindControl("txtByWhen");
        txtByWhen.Attributes.Add("readonly", "readonly");
    }
}
上一篇:如何在Javascript中动态添加文本框?


下一篇:通过以编程方式更改文本框值来调用Javascript onchange事件