Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在设置usercontrol的值之前填充其下拉列表_C#_Asp.net_User Controls - Fatal编程技术网

C# 在设置usercontrol的值之前填充其下拉列表

C# 在设置usercontrol的值之前填充其下拉列表,c#,asp.net,user-controls,C#,Asp.net,User Controls,我有一个名为ucTZones的用户控件 下面是usercontrol的代码 public partial class ucTZones : UserControl{ /// <summary> /// Accessor for the time zone drop-down. /// </summary> public int ddlProp { get

我有一个名为ucTZones的用户控件 下面是usercontrol的代码

public partial class ucTZones : UserControl{

        /// <summary>
        /// Accessor for the time zone drop-down.
        /// </summary>
        public int ddlProp
        {
            get
            {
                try
                {
                    return Int32.Parse(ddl.SelectedValue);
                }
                catch
                {
                    return 1;
                }
            }
            set
            {
                try
                {
                    this.ddl.SelectedValue = value.ToString();
                }
                catch
                {
                    this.ddl.SelectedValue = "0";
                }
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if(!ispostback)
              BindDropDown();

          }

        private void BindDropDown()
        {
          ddl.datasource =somelist;
          ddl.DataBind();
        }
    }
现在我的问题是如何在执行之前填充usercontrol的ddl 页面的下一行\u加载TZonePage

this.ucTZones.ddlProp=15; 

你可以检查一下,我没有测试过

public partial class ucTZones : UserControl{
            /// <summary>
            /// Accessor for the time zone drop-down.
            /// </summary>
            public int ddlProp
            {
                get
                {
                    // your variable to get the value
                }
                set
                {
                    // your variable to assign
                }
            }

            protected void Page_Load(object sender, EventArgs e)
            {
                if(!ispostback)
                  BindDropDown();

              }

            private void BindDropDown()
            {
              ddl.datasource =somelist;
              ddl.DataBind();
ddl.SelectedValue = ddlProp;
            }
        }
public部分类:UserControl{
/// 
///时区下拉列表的访问器。
/// 
公共int ddlProp
{
得到
{
//您的变量以获取值
}
设置
{
//要分配的变量
}
}
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!ispostback)
BindDropDown();
}
私有void绑定下拉列表()
{
ddl.datasource=somelist;
ddl.DataBind();
ddl.SelectedValue=ddlProp;
}
}

由于您注意到的原因,通常不应在
用户控件中使用
页面加载
(或其他页面方法)。相反,您应该在触发逻辑的UC中使用方法或属性。在这种情况下,如果数据源已加载,也可以检入属性:

public int ddlProp
{
    get
    {
        if(ddl.SelectedIndex == -1)
            return -1;
        return int.Parse(ddl.SelectedValue);
    }
    set
    {
         if(ddl.datasource== null)
             BindDropDown();
         if(ddl.Items.FindByValue(value.ToString()) != null)
             this.ddl.SelectedValue = value.ToString();
         else
             this.ddl.SelectedValue = "0";
    }
}

为什么不为
DropDownList
的数据源提供一个属性呢?然后控制器(页面)负责正确的顺序,它也更易于重用。谢谢Tim。让我实施并检查这是我在问题中提到的。它的解决方案在哪里?请检查
BindDropDown()
函数
public int ddlProp
{
    get
    {
        if(ddl.SelectedIndex == -1)
            return -1;
        return int.Parse(ddl.SelectedValue);
    }
    set
    {
         if(ddl.datasource== null)
             BindDropDown();
         if(ddl.Items.FindByValue(value.ToString()) != null)
             this.ddl.SelectedValue = value.ToString();
         else
             this.ddl.SelectedValue = "0";
    }
}