0

我有一个 web 用户控件 ( OrderDefinition.ascx),它有一个下拉列表 ( ddl_CustomerCode),由 web 用户控件的 page_load 函数填充

    public void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {

            ddl_CustomerCode.DataSource = OrderDefinitionData.GetCustomers();
            ddl_CustomerCode.DataTextField = "CustomerCode";
            ddl_CustomerCode.DataValueField = "CustomerName";                
            ddl_CustomerCode.DataBind();
         }
    }

在我的 default.aspx 页面中,我动态添加了这个 Web 用户控件

    Control x = LoadControl("Controls/OrderDefinition.ascx");
    Panel1.Controls.Add(x);

我想从我的 default.aspx 将参数传递给这个 web 用户控件,我想出了使用会话或视图状态或缓存来使用的想法。所以现在我的 default.aspx 看起来像

    Session["myParam"] = "customerNo1";
    Control x = LoadControl("Controls/OrderDefinition.ascx");
    Panel1.Controls.Add(x);

我的 Page_Load 看起来像

    public void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            string myParam = Session["myParam"];
            ddl_CustomerCode.DataSource = OrderDefinitionData.GetCustomers(myParam);
            ddl_CustomerCode.DataTextField = "CustomerCode";
            ddl_CustomerCode.DataValueField = "CustomerName";                
            ddl_CustomerCode.DataBind();
         }
    }

问题是我不确定我上面的编码方式,我应该相信这个架构吗?如果这是将参数传递给 Web 用户控件的正确方法,请澄清我。

4

5 回答 5

4

正如其他人建议的那样,您可以在 ascx 中执行此操作:

    public string myParam { get; set; }
    public void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ddl_CustomerCode.DataSource = OrderDefinitionData.GetCustomers(myParam);
            ddl_CustomerCode.DataTextField = "CustomerCode";
            ddl_CustomerCode.DataValueField = "CustomerName";                
            ddl_CustomerCode.DataBind();
         }
    }

然后在您的 ASPX 中执行此操作:

WebControl1 x = (WebControl1)Page.LoadControl("Controls/OrderDefinition.ascx");
x.myParam = "customerNo1";
Panel1.Controls.Add(x);

当您通过 LoadControl 函数实例化 Web 控件时,请注意转换为您的 Web 控件类型 - 执行此转换很重要,以便您可以访问您的属性和方法。

于 2012-08-01T07:27:56.580 回答
2

您应该在用户控件中创建属性并通过它传递值。

于 2012-08-01T06:35:50.123 回答
2

只需在您的网络控件中创建一个公共属性,例如

private int myid=0;

public int MyID
{
    set { myid = value; }
}

然后将其设置在用户控件的 pageLoad 上。在您的 defaultpage.aspx 中,您可以访问类似的属性

myUserControl.MyId=32;
于 2012-08-01T08:12:34.623 回答
1

您可以在控件中创建公共方法,并通过页面访问它们,很简单。或者你也可以设置属性,你有两个选项。

于 2012-08-01T06:38:57.017 回答
1

像这样使用Session会使正确封装控件变得非常困难,并且使用起来也不是很直观,因为Session键不会出现在控件上(或者通过智能感知)。按照此处其他人的建议,使用控件上的参数。

于 2012-08-01T06:42:02.820 回答