首页 > 解决方案 > 回发后文本框文本消失

问题描述

我正在寻找在 asp.net 中使用这样的标题列制作 GridView

<asp:TemplateField SortExpression="Date">
    <HeaderTemplate>                                      
        <asp:LinkButton ID="headerDate" runat="server" Text="Date ↕️" CommandArgument="Date" CommandName="Sort" ></asp:LinkButton>
        <br />
        <asp:TextBox  AutoPostBack="true" ontextchanged="bindFilteredList" ReadOnly="false" CssClass="search_textbox"  runat="server" ID="fitlerDate" > 
        </asp:TextBox>
    </HeaderTemplate>
    <ItemTemplate>
        <%#Eval("Date") %>
    </ItemTemplate>
</asp:TemplateField>

我的问题是,当一个文本框被填充时,我的 onTextChanged 函数被触发,我做了我的伎俩(textBox 中的值仍然在这里),并且页面会自行刷新并通过 page_Load :

if (!IsPostBack && !IsAsync)
{
    this.mpePopUp.Hide();
    String defaultSortExpression;
    enuSortOrder defaultSortOrder;
    int defaultIndex;
    // On trie par date déscendant par défaut pour avoir les articles les plus récents
    defaultSortExpression = sortExpression[0];
    defaultSortOrder = enuSortOrder.soDescending;
    defaultIndex = 0;

    // bind data au gridview
    this.ViewState.Add(VS_CURRENT_SORT_EXPRESSION, defaultSortExpression);
    this.ViewState.Add(VS_CURRENT_SORT_ORDER, defaultSortOrder);
    this.ViewState.Add(VS_CURRENT_INDEX, defaultIndex);


    bindData(defaultSortExpression, defaultSortOrder, defaultIndex);
}

虽然我不适合 if(使用调试器检查),但在函数结束时,当调试器位于右大括号上时,我的值会从 TextBox 中消失。

我该怎么做才能将值保留在 TextBox 中?

你需要知道所有这些:

TextBox tb = (this.TableArticles.HeaderRow.FindControl("filterDate") as TextBox);

我不知道为什么我的文本框 ID 不存在。

标签: c#asp.net

解决方案


您必须将 fitlerDate 的值存储在 ontextchanged 事件中的 ViewState 中。像

ViewState["fitlerDate"] = fitlerDate.Text;

并在过滤后重新绑定网格时再次绑定该值。

您必须注册 GridView 事件OnRowDataBound,在这种情况下,您必须编写逻辑来查找标题控件,例如

protected void gvGrid_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.Header)
            {
                TextBox fitlerDate = (TextBox)e.Row.FindControl("fitlerDate");
                if (fitlerDate != null)
                {
                    fitlerDate.Text = ViewState["fitlerDate"].ToString();
                }
            }            
        }

推荐阅读