我有一个UC_Categories.ascx (UC_1),它限制了categoryname。 UC_Products.ascx (UC_2)将按类别名称显示产品。它们都位于名为BookShop.aspx(Page)
的 Page 中在页面中,当用户点击 UC_1 (步骤1)时,它将按类别名称呈现 UC_2 (步骤2)。我通过向页面发送带有类别名称的参数的请求来处理步骤1。 Step2创建一个新的 UC_2 ,设置属性值为categoryname,并执行FillProductByCategoryName方法。然后将 UC_2 添加到Page中的PlaceHolder。但我没有显示 UC_2 。
我需要每个人的帮助或建议。
感谢您阅读我的问题! ps:我的英语不是很好。
在UC2的代码隐藏中:
public void FillProduct()
{
ProductsMN productsMN = new ProductsMN();
if (dlBook == null)
{
dlBook = new DataList();
dlBook.DataSource = productsMN.GetByCategoryName(CategoryName);
dlBook.DataBind();
}
else
{
dlBook.DataSource = productsMN.GetByCategoryName(CategoryName);
dlBook.DataBind();
}
}
public string CategoryName { get; set; }
在页面的代码隐藏中
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
}
string categoryName = Request.QueryString["categoryName"] as string;
if (!string.IsNullOrWhiteSpace(categoryName))
{
BookContent.Controls.Clear(); // BookContent : Placeholder
Control c = Page.LoadControl("~/UC/UC_Books.ascx") as UC.UC_Books;
UC.UC_Books ucBook = new UC.UC_Books();
ucBook.CategoryName = categoryName;
ucBook.FillProduct(); //line 10
BookContent.Controls.Add(ucBook); //line 11
}
}
在Page的PageLoad中,useBook包含数据。但在页面(视图)中,我看不到数据。我认为// line11不是执行或不是真的。
答案 0 :(得分:1)
您需要将公共属性和UserControl控件的构造函数公开给父页面。
假设您的Usercontrol有一个标签:
<asp:Label ID="MyLabel" runat="server" visible="true"/>
在UserControl的代码隐藏中添加此内容。
//Constructor
public MyUserControl()
{
Category = new Label();
}
//Exposing the Label
public Label Category
{
get { return this.MyLabel; }
set { this.MyLabel = value; }
}
假设您已将UserControl添加到父页面,其ID为“MyUserControl”。
要将UserControl的标签值设置为某个值,请使用:
MyUserControl.Category.Text=Response.QueryString["categoryname"];//Obviously you would want to encode it first.
如果需要在UserControl的代码隐藏中调用父页面的功能,则必须使用委托。我不推荐这种方法。