asp:textbox 的值在覆盖后没有改变

value of asp:textbox is not being changed after written over it

我有一个这样的文本框:

 <asp:TextBox runat="server" ID="reasonNameTextBox"></asp:TextBox>

当我第一次加载页面时,我在里面放了一个值,如下所示:

reasonNameTextBox.Text = results.Rows[0]["reasonName"].ToString();

然后,用户可以输入他的新值,然后单击保存按钮。

我的问题

当用户点击保存按钮时,文本框的值仍然是我在页面加载时分配的值,而不是用户写入的值。 我尝试使用 Google Chrome F12 功能,但发现错误。

请看这张图

如你所见,我在文本框中写的值是New Value,然而,文本框中的值(使用F12时)仍然是s,其中s 是我在加载页面时分配的值。

请问这是为什么?

这是因为每次你点击你回发的按钮并再次重新加载页面,因此调用 Page_Load,这又是分配您在页面加载期间分配的值。

要避免这种情况,您需要执行以下操作:-

If(!IsPostback)
{
    reasonNameTextBox.Text = results.Rows[0]["reasonName"].ToString();    
}  

这不会使用您在 Page_Load 期间设置的默认值更新您的文本框值,并将采用用户更新的值。

更改值不会更新 DOM(除非您通过 javascript 更改它)。因此,就像您所做的那样,通过开发人员工具检查文本框会产生您从服务器收到的文本值。

有趣的部分在于您的网页的代码隐藏文件。我认为它看起来类似于:

public partial class WebForm1 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        var results = GetResults();
        reasonNameTextBox.Text = results.Rows[0]["reasonName"].ToString();
    }
}

在这种情况下,无论用户输入如何,每次都会设置文本框的值。您需要做的是寻找回传:

public partial class WebForm1 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        var results = GetResults();

        if (IsPostBack)
        {
            // retrieve the user input
            var input = reasonNameTextBox.Text;
        }
        else
        {
            // set default value
            reasonNameTextBox.Text = results.Rows[0]["reasonName"].ToString();
        }
    }
}