小编tim*_*ck2的帖子

为什么ASP.NET在更改内容时提交TextBox控件的原始值?

我有一个Web表单,允许用户使用提交按钮修改某些字段中的数据(主要是TextBox控件,带有几个CheckBox,DropDownList和一个RadioButtonList控件)以保存更改.很标准的东西.问题是,我需要跟踪他们修改的字段.所以我使用ASP.NET HiddenField控件来存储原始值,然后在提交时将其与相应的TextBox(例如)控件的值进行比较,以确定哪些字段已被修改.

但是,当我提交表单并进行比较时,后面代码中TextBox控件的值仍然反映原始值,即使我已经更改了TextBox的内容,因此它没有注册更改.以下是我的ASP.NET表单中的一组TextBox/HiddenField配对(在本例中为last,first,middle name)的示例:

<div id="editName" class="editField" style="display: none">
    <asp:TextBox ID="tbxLName" runat="server" class="editable"></asp:TextBox>,
    <asp:TextBox ID="tbxFName" runat="server" class="editable"></asp:TextBox>
    <asp:TextBox ID="tbxMName" runat="server" class="editable"></asp:TextBox>
    <asp:HiddenField ID="hdnLName" runat="server" />
    <asp:HiddenField ID="hdnFName" runat="server" />
    <asp:HiddenField ID="hdnMName" runat="server" />
</div>
Run Code Online (Sandbox Code Playgroud)

我在后面的代码中的PageLoad上设置所有这些控件的原始值(TextBox控件的".Text",HiddenField控件的".Value").

这是我在提交表单时进行比较的示例(如果值不同,我将字段名称,旧值和新值添加到List <string>对象):

if (tbxLName.Text != hdnLName.Value)
{
    changes.Add("ConsumerLastName");
    oldVal.Add(hdnLName.Value);
    newVal.Add(tbxLName.Text);
}
Run Code Online (Sandbox Code Playgroud)

但是当我在TextBox控件中输入一个新值并单击Submit时:

在TextBox中输入新值

然后逐步调试调试器中的代码,它告诉我控件的值仍然是旧值:

调试器中TextBox的旧值

为什么比较发生在TextBox的原始值上,即使单击提交按钮时存在新值?

更新:@David获得了这个功劳,即使他没有将其作为答案发布 - 我忘记在IsPostBack的支票中附上预先填充控件原始值的方法; 我真的应该知道的更好,我已经做了很长一段时间了!

c# asp.net

7
推荐指数
1
解决办法
1万
查看次数

为什么Response.Write()不会将CSV文件导出到浏览器?

我正在尝试将DataTable的内容作为Excel .csv文件导出到用户的浏览器.当我单击"导出"按钮并在调试器中逐步执行我的代码时,一切看起来都在发生,但实际上没有文件被发送到浏览器.问题是,我在另一个项目中使用这个完全相同的代码,它在那里工作.

编辑:这是包含按钮的整个UpdatePanel的ASPX标记:

<asp:UpdatePanel ID="updNoUsage" runat="server">
  <ContentTemplate>
    <asp:Button ID="btnNoUsageLookup" runat="server" Text="Get No Usage Lines Report"
      OnClick="btnNoUsageLookup_Click" /><br /><br />
    <asp:Label ID="lblNoUsageMessage" runat="server" Font-Bold="True" ForeColor="Blue"
      Text="Message" Visible="False"></asp:Label><br /><br />
    <asp:Panel ID="pnlNoUsageReport" runat="server" Visible="False" BorderStyle="None">
      <asp:GridView ID="gvNoUsage" runat="server" AllowPaging="True" AllowSorting="True"
        AutoGenerateColumns="False" BorderColor="#666666" BorderStyle="Solid"
        BorderWidth="1px" PageSize="25" OnPageIndexChanging="gv_PageIndexChanging"
        OnSorting="gv_Sorting" OnRowCreated="gvNoUsage_RowCreated">
          <HeaderStyle BackColor="Transparent" />
          <RowStyle BackColor="#e5e5e5" />
          <AlternatingRowStyle BackColor="White" />
          <Columns>
            <asp:BoundField DataField="CostCenter" HeaderText="Cost Center" SortExpression="CostCenter" />
            <asp:BoundField DataField="WirelessNumber" HeaderText="Wireless Number" SortExpression="WirelessNumber" />
            <asp:BoundField DataField="ESN" HeaderText="ESN" SortExpression="ESN" />
            <asp:BoundField DataField="UserName" HeaderText="User Name" SortExpression="UserName" /> …
Run Code Online (Sandbox Code Playgroud)

c# csv asp.net

5
推荐指数
2
解决办法
4705
查看次数

标签 统计

asp.net ×2

c# ×2

csv ×1