0

我正在尝试制作一个通用的 Search UserControl,它可以根据搜索结果将显示的这些值赋予一些值。但是,我目前正在尝试显示我的值的结果,它们总是显示为我的默认值。

我的用户控制代码:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ProductSearch.ascx.cs" Inherits="..." %>
<asp:Label ID="lblSearchWord" runat="server" />
<asp:Label ID="lblSearch" runat="server" />

代码背后:

private string _searchWord = string.Empty;
private int _search = -1;
public string SearchWord
      {
         get { return _searchWord; }
         set { _searchWord = value; }
      }

      public int Search
      {
         get { return _search; }
         set { _search = value; }
      }
protected void Page_Load(object sender, EventArgs e)
      {
         lblGroupId.Text = LevelId.ToString();
         lblSearchWord.Text = SearchWord;
}

当我按下主 aspx.cs 页面上的搜索按钮时,我执行以下操作:

 protected void btnSearch_Click(object sender, EventArgs e)
      {
          ucPS.SearchWord = txtProductSearch.Text;
          ucPS.Search = 1
}

我的 aspx 页面包含以下内容

<%@ Register src="UserControls/ProductSearch.ascx" tagname="ProductSearch" tagprefix="ps" %>
<ps:ProductSearch id="ucPS" runat="server" />

我的问题是我不能使用查询字符串,因为用户可能在此页面上选择了我需要保持状态的其他一些东西,但是我确实测试了它并发现它可以正常工作。

我哪里错了?还是有更好的选择(查询字符串除外)。

4

2 回答 2

3

页面中的所有变量都在page-lifecycle结束时处理。因此SearchWord将始终在每次回发时使用默认值进行初始化。

您需要将它保存在其他地方,例如在ViewState变量中。

public string SearchWord
{
    get
    {
        if (ViewState["SearchWord"] == null)
            return "";
        else
            return (String)ViewState["SearchWord"];
    }
    set { ViewState["SearchWord"] = value; }
}

在 ASP.NET 应用程序中管理持久用户状态的九个选项

于 2012-05-16T14:56:04.783 回答
3
public string SearchWord
{
    get
    {
        if (ViewState["SearchWord"] == null)
           ViewState["SearchWord"] = string.Empty;

        return ViewState["SearchWord"];
    }
    set
    {
        ViewState["SearchWord"] = value;
    }
}

我使用数据绑定而不是页面加载,这样你的用户控件不会加载,除非你调用它。

protected override DataBind()
{
     //you can add a condition here if you like
     if(SearchWord != string.Empty)
        lblSearchWord.Text = SearchWord;
}

从 aspx 调用它:

usercontrol.SearchWord = "my word";
usercontrol.DataBind();

就是这样..

于 2012-05-16T15:06:14.677 回答