asp.net正常html输入runat =“server”在代码隐藏中返回非更新值

时间:2014-01-13 07:50:08

标签: c# asp.net

我有编辑服务器详细信息页面,名为editServer.aspx。在页面加载时,我从数据库中检索数据并将值设置为文本框。当用户单击“保存”按钮时,文本框中的值为空或未更新为用户键入的新值。

.aspx中的部分代码

<input type="text" class="form-control" id="serverRemarksTB" name="serverRemarksTB" 
       placeholder="general server remarks" runat="server"/>
<asp:Button ID="editPhysicalServerBtn" runat="server" Text="Save" class="btn btn-success"
  style="padding-left:30px; padding-right:30px;" onclick="editPhysicalServerBtn_Click" />

在.aspx.cs

 protected void Page_Load(object sender, EventArgs e)
 {
    //code to retrieve data from database and store in server instance
    serverRemarksTB.Value = server.remarks;
 }        
 protected void editPhysicalServerBtn_Click(object sender, EventArgs e)
 {      
     string remarks = serverRemarksTB.Value; //this is not updated.  
 }

例如,在数据库中,服务器备注是“不要关闭”。所以当我打开.aspx页面时,我会看到文本框中有“不要关机”。当我将值更改为“可以关闭”并单击“保存”按钮时,在aspx.cs服务器中,备注值保持不变 - “不要关闭”。

3 个答案:

答案 0 :(得分:3)

这是因为每次加载页面时都会使用这行代码覆盖输入值...

serverRemarksTB.Value = server.remarks;

并基于ASP.NET Pipeline Lifecycle,首先执行Page_Load,然后控制'事件处理程序。为避免这种情况,只有在页面首次加载... GET请求而不是POST请求时,才需要运行上述代码行。您可以像这样更改Page_Load事件处理程序......

protected void Page_Load(object sender, EventArgs e)
{
        //code to retrieve data from database and store in server instance
        if(!IsPostBack)
            serverRemarksTB.Value = server.remarks;
 }

答案 1 :(得分:2)

使用IsPostBack子句或每次加载页面时,您的文本框都将填充数据库值。

单击“保存”按钮时,会导致回发,从而再次导致serverRemarksTB“不要关机”

if(!Page.IsPostBack)
{
serverRemarksTB.Value = server.remarks;
}

答案 2 :(得分:1)

这是因为您的page_Load serverRemarksTB.Value = server.remarks;代码未包含在IsPostback块中。因此,当您发布表单时,文本框的值将更新为数据库值。您应该将数据库代码放在IsPostback内。喜欢

 if(!IsPostBack)
    {
       serverRemarksTB.Value = server.remarks;
    } 
在Page_Load方法中