无法在弹出模式中获得新的控制值

时间:2018-01-05 22:15:12

标签: c# asp.net webforms

网页控件是否会显示为您正在更改其值但实际上保留了之前的值?

我为用户创建了一个弹出模式来编辑项目。当用户单击主页上项目的编辑时,会发生以下顺序:

  1. 项目的ID传递给模态页面的Page_Load事件,用于使用项目的数据填充页面控件。
  2. 用户更改控件中的值。例如:更改TextBox控件中的文本。
  3. 用户单击“保存”,触发Click事件,该事件将创建一个DataTransferObject,其中包含文本框中的值,这些值将被存储。
  4. 但是,在第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;
    }
    

    值得注意的是,此弹出页面用于创建项目和编辑项目。创建工作正常(即该项目不会与所有空白一起保存,而是保存在用户输入中)。编辑项目会正确地将所有数据拉回来,让用户编辑字段,但我无法访问代码中的更改值。

1 个答案:

答案 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