0

我有一个约束 categoryname 的 UC_Categories.ascx (UC_1)。UC_Products.ascx (UC_2)将按类别名称显示产品。它们都在一个名为 BookShop.aspx ( Page )的页面中

在页面中,当用户单击一个UC_1(步骤 1)时,它将按类别名称呈现一个UC_2 (步骤 2 )。我通过向Page发送一个参数为 categoryname 的请求来处理第 1 步。Step2 新建一个UC_2,设置属性值为categoryname,执行FillProductByCategoryName方法。然后将UC_2添加到页面中的 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 未执行或不正确。

4

1 回答 1

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 的代码隐藏中调用父页面的功能,则必须使用委托。我不会推荐这种方法。

于 2012-07-21T03:52:56.640 回答