网页控件是否会显示为您正在更改其值但实际上保留了之前的值?
我为用户创建了一个弹出模式来编辑项目。当用户单击主页上项目的编辑时,会发生以下顺序:
但是,在第3步中,控件的新值(TextBox.Text)仍保留其原始值,而不是用户输入的值。
Add.aspx:
<%@ MasterType VirtualPath="../MasterPages/Popup.Master" %>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<asp:TextBox ID="TextBoxDescription" runat="server"></asp:TextBox>
<telerik:RadButton ID="btnSave" runat="server" Text="Save" OnClick="btnSave_Click"/>
</asp:Content>
Add.aspx.cs
//Cannot access the new values here
protected void btnSave_Click(object sender, EventArgs e)
{
//This will print the new text on Create, but the old text on Edit
System.Diagnostics.Debug.WriteLine(TextBoxDescription.Text);
}
//works properly
protected void Page_Load(object sender, EventArgs e)
{
objIDParam = Convert.ToInt64(Request.QueryString["ObjectID"]);
editMode = (objIDParam != 0) ? true : false;
if(editMode)
PopulateFields(objID);
}
//works properly
private void PopulateFields(long objID)
{
MyObject obj = GetObjectByID(objID);
TextBoxDescription.Text = obj.Description;
}
值得注意的是,此弹出页面用于创建项目和编辑项目。创建工作正常(即该项目不会与所有空白一起保存,而是保存在用户输入中)。编辑项目会正确地将所有数据拉回来,让用户编辑字段,但我无法访问代码中的更改值。
答案 0 :(得分:1)
您需要在IsPostBack
方法中检查Page_Load
。
在Page_Load
方法之前调用btnSave_Click
,因此在TextBoxDescription.Text
方法运行之前,obj.Description
会重置为btn_Save
。
如果您要回发,请尝试退回Page_Load:
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
return;
objIDParam = Convert.ToInt64(Request.QueryString["ObjectID"]);
editMode = (objIDParam != 0) ? true : false;
if(editMode)
PopulateFields(objID);
}
有关详细信息,请查看ASP.NET Page Life Cycle Overview。