写入后,asp:textbox的值不会被更改

时间:2015-01-31 14:08:18

标签: c# asp.net .net textbox

我有一个这样的文本框:

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

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

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

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

我的问题

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

请看这个图片

enter image description here

如您所见,我在文本框中写的值为New Value,但是,文本框中的值(使用F12时)仍为s,其中s是加载页面时指定的值。

为什么这样?

2 个答案:

答案 0 :(得分:2)

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

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

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

这样,您不会使用在 Page_Load 期间设置的defaultvalue更新文本框值,并且会获取用户更新的值。

答案 1 :(得分:1)

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

有趣的部分在于你的WebPage的CodeBehind文件。我认为它看起来与此相似:

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();
        }
    }
}