簡體   English   中英

Asp.net將值傳遞給用戶控件,然后顯示它們

[英]Asp.net passing values to the User control then display them

我正在嘗試根據搜索結果將顯示的值,為這些用戶提供一個通用的Search UserControl值。 但是,我目前正在嘗試顯示值的結果,並且它們始終顯示為默認值。

我的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" />

我的問題是我不能使用查詢字符串,因為用戶可能在此頁面上選擇了我需要保持其狀態的其他內容,但是我確實對其進行了測試並使其正常工作。

我要去哪里錯了? 還是有更好的選擇(查詢字符串除外)。

頁面中的所有變量都位於page-lifecycle的末尾。 因此, 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;
    }
}

而且我使用databind而不是pageload,這樣,除非您調用它,否則不會加載您的usercontrol。

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();

就是這樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM