Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.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# 将用户控件类传递到主机页_C#_Asp.net_User Controls - Fatal编程技术网

C# 将用户控件类传递到主机页

C# 将用户控件类传递到主机页,c#,asp.net,user-controls,C#,Asp.net,User Controls,如何将用户控件属性传递给页面,并使这些属性可用于页面上的所有方法(而不仅仅是在控件操作中激发的一个方法,例如onControlClick) 我有一个基本上3页的设置: 用户控制(ascx/cs) 类(cs)-包含用户控件属性的 主机页(aspx/cs)-引用用户控件 用户控件由3个相互关联的下拉列表组成。我已经成功地通过一个事件将这些下拉值通过一个类传递到页面上,当用户单击下拉菜单时会触发该事件。因此,通过这种方式,主机页可以持续地感知用户控件中的值。但是,我希望页面在其所有方法上使用控件的

如何将用户控件属性传递给页面,并使这些属性可用于页面上的所有方法(而不仅仅是在控件操作中激发的一个方法,例如onControlClick)

我有一个基本上3页的设置:

  • 用户控制(ascx/cs)
  • 类(cs)-包含用户控件属性的
  • 主机页(aspx/cs)-引用用户控件
用户控件由3个相互关联的下拉列表组成。我已经成功地通过一个事件将这些下拉值通过一个类传递到页面上,当用户单击下拉菜单时会触发该事件。因此,通过这种方式,主机页可以持续地感知用户控件中的值。但是,我希望页面在其所有方法上使用控件的属性(存储在类中)——如何使此用户控件类对所有方法都可用

顺便说一下,我正在使用ASP.NET和C#

代码如下(此处不共享完整代码-仅共享类似代码块的片段)

在ASPX for菜单主机页上:

<linked:LinkMenu2 id="Menu1" runat="server" OnLinkClicked="LinkClicked" />
主机页(aspx)

类别:

public class ddtestEventArgs : EventArgs
{
    // Link
    private string link;
    public string Link
    {
        get { return link; }
        set { link = value; }
    }

    public ddtestEventArgs(string link)
    {
    Link = link;
    }
}

public delegate void ddtestEventHandler(object sender, ddtestEventArgs e);

希望这就是你想要的。最好的方法是从用户控件中将控件公开为公共属性。因此,在用户控件中,为每个下拉列表添加一个属性:

public DropDownList DropDown1
{
   get { return dropDownList1; }
}

public DropDownList DropDown2
{
   get { return dropDownList2; }
}
您可以对要在主机页上访问的任何其他属性执行相同的操作:

public string DropDown1SelectedValue
{
   get { return dropDownList1.SelectedValue; }
   set { dropDownList1.SelectedValue = value; }
}
然后,您可以从主机页通过用户控件访问属性:

string value = UserControl1.DropDown1SelectedValue;

以下是我认为(如果我理解正确的话)您可能会觉得有用的几个其他已回答问题这就是您正在做的:


因此,基本上是为我的用户控件设置属性(在我的例子中,我的3个下拉列表的控件总共有3个属性)。然后页面将能够像在普通控件上一样引用这些属性。我唯一关心的是——这是一个糟糕的设计吗?因为通常在使用属性时,您希望页面与控件通信?但在我的例子中,通信都是关于用户控件-->页面的?所以你是说你想让用户控件告诉页面该做什么?如果是这样,那就是糟糕的设计。UserControls实际上应该是独立的,并向页面返回属性值。也就是说,主机页是负责的,不应该接受命令。基本上是的-下拉菜单设置参数,从而获得一个数据集,该数据集显示在页面上。我应该使用什么呢?您可能应该将控件中的数据集作为属性公开。或者有一个方法,即GetDataSet();它根据所选的下拉列表生成数据集。实际上,我有一个类似于GetDataSet的方法,它与SPs一起工作以选择、更新或删除数据。所以我已经准备好了。但是这个GetDataSet()需要的一些属性是由我的用户控件中的下拉列表决定的。我还认为集成用户控件的整个前提是在页面和控件之间提供更丰富的交互?
public DropDownList DropDown1
{
   get { return dropDownList1; }
}

public DropDownList DropDown2
{
   get { return dropDownList2; }
}
public string DropDown1SelectedValue
{
   get { return dropDownList1.SelectedValue; }
   set { dropDownList1.SelectedValue = value; }
}
string value = UserControl1.DropDown1SelectedValue;
string value = UserControl1.DropDownList1.SelectedValue;