提问者:小点点

为什么在ASP.NET中检测不到html输入文本框中的更改?


我有一个repeater,其中一个列包含一个textbox,上面附加了一个JQuery datepicker和一个update按钮。因此,用户使用datepicker更改日期,单击update并将其写入数据库,原始日期和记录id存储在隐藏字段中。

null

<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<tr>

<td>
<asp:HiddenField ID="hidThisID" Value='<%# Eval("orderID") %>' runat="server" />
<asp:HiddenField ID="hidPrevDueDate" Value='<%# Eval("Duebeforedate", "{0:dd/MM/yyyy}") %>' runat="server" />
<input type="text" class="form-control fc-datepicker duedateinput" style="width: 150px" value='<%# Eval("Duebeforedate", "{0:dd/MM/yyyy}") %>'  runat="server" id="fccd" readonly />
<asp:LinkButton ID="btnDateUpdate" OnClick="btnDateUpdate_Click" CssClass="btn btn-primary btn-sm" runat="server" ToolTip="Approved"> Update </asp:LinkButton>
</td>

</tr>
</ItemTemplate>
</asp:Repeater>

null

调用此函数

null

protected void btnDateUpdate_Click(object sender, EventArgs e)
    {
        foreach (RepeaterItem item in Repeater1.Items)
        {
            HtmlInputText htmlDueDate = (HtmlInputText)item.FindControl("fccd");
            HiddenField hidID = (HiddenField)item.FindControl("hidThisID");
            HiddenField hidOldDate = (HiddenField)item.FindControl("hidPrevDueDate");
            DateTime prevDueDate = Convert.ToDateTime(hidOldDate.Value.ToString());
            DateTime newDueDate = Convert.ToDateTime(htmlDueDate.Value.ToString());
            string ID = hidID.Value;
            if (prevDueDate != newDueDate)
            {
                string query = "update [tblOrders] set Duebeforedate=CONVERT(datetime,'" + newDueDate.ToString() + "', 103) where  [orderID] =  '" + ID + "'";
                
                //database stuff here
            }
        }
    }

null

但是,newDueDate变量仍然保留原始的到期日。因此,新旧日期匹配,因此数据库不会更新。如何让它存储新值?


共1个答案

匿名用户

我不认为您将能够找到您的HTML元素,如果它是在一个中继器。

尝试处理中继器的ItemDataBound事件。

看看这道题中的解法:

如何利用C#获取ASpx页面中repeater控件中的元素Id