【问题标题】:Why is the change in an html input textbox not being detected in asp.net?为什么在 asp.net 中未检测到 html 输入文本框的更改?
【发布时间】:2021-03-27 13:31:20
【问题描述】:

我有一个中继器,其中一列包含一个文本框,在该文本框上附加了一个 JQuery 日期选择器和一个更新按钮。因此用户使用日期选择器更改日期,单击更新并写入数据库。原始日期和记录 id 存储在隐藏字段中。

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

调用这个函数

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
            }
        }
    }

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

【问题讨论】:

  • 您的代码容易受到 SQL 注入攻击。您不应将来自客户端的任何字符串值直接连接到您的 SQL 查询。使用参数化(准备好的)查询,或者对来自客户端的值进行转义

标签: c# asp.net webforms


【解决方案1】:

对于双向数据绑定,您需要使用 Bind 关键字而不是 Eval

【讨论】:

  • 我确实将 Eval 更改为 Bind,但没有任何区别。
【解决方案2】:

修好了,根本就不是btnUpdate函数,我忘了这个检查-

if (!IsPostBack)
{
     //bind the repeater
}

【讨论】:

    猜你喜欢
    • 2011-09-03
    • 2022-01-12
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多