Asp.net 将值传递给用户控件,然后显示它们
本文关键字:然后 显示 控件 给用户 net 值传 Asp | 更新日期: 2023-09-27 18:34:16
我正在尝试创建一个通用的搜索用户控件,可以根据搜索结果将显示的值给出一些值。但是,我目前正在尝试显示我的值的结果,它们始终显示为我的默认值。
我的用户控制代码:
<%@ 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" />
我的问题是我无法使用查询字符串,因为用户可能在此页面上选择了我需要保持状态的其他一些内容,但是我确实测试了该内容并发现它可以工作。
我哪里出错了?或者有更好的选择(查询字符串除外)。
页面中的所有变量都在页面生命周期结束时释放。因此,SearchWord
将始终在每次回发时使用默认值进行初始化。
您需要在其他地方保留它,例如在ViewState
变量中。
public string SearchWord
{
get
{
if (ViewState["SearchWord"] == null)
return "";
else
return (String)ViewState["SearchWord"];
}
set { ViewState["SearchWord"] = value; }
}
用于管理 ASP.NET 应用程序中持久用户状态的九个选项
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();
仅此而