【问题标题】:Passing parameter to Web User Control by a data storage method like Session, Viewstate, Cache?通过会话、视图状态、缓存等数据存储方法将参数传递给 Web 用户控件?
【发布时间】:2012-08-01 06:23:29
【问题描述】:

我有一个 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 用户控件的正确方法,请澄清我。

【问题讨论】:

    标签: c# asp.net parameter-passing webusercontrol


    【解决方案1】:

    正如其他人建议的那样,您可以在 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 控件类型 - 执行此转换非常重要,以便您可以访问您的属性和方法。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

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

        myUserControl.MyId=32;
        

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-04-05
              • 2011-07-16
              • 2010-11-07
              相关资源
              最近更新 更多