我有编辑服务器详细信息页面,名为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服务器中,备注值保持不变 - “不要关闭”。
答案 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方法中。