将用户控件类传递给主页

时间:2010-06-24 15:43:41

标签: c# asp.net user-controls

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

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

  • 用户控件(ascx / cs)
  • class(cs) - 包含用户控件属性
  • 主页(aspx / cs) - 引用用户控件

用户控件由3个相互关联的下拉列表组成。我通过在用户点击下拉菜单时触发的事件将这些下拉值通过类传递到页面上成功。因此,这样主机页面就会持续了解用户控件中的值。但是,我希望页面在其所有方法上使用控件的属性(存储在类中) - 如何使所有用户控件类都可用?

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

这是代码(此处不共享完整代码 - 只是类似代码块的代码段)

在菜单主页的ASPX上:

<linked:LinkMenu2 id="Menu1" runat="server" OnLinkClicked="LinkClicked" />

主页(cs):

protected void dropdownclicked(object sender, ddtestEventArgs e)
{
    if (e.Url == "Menu2Host.aspx?product=Furniture")
    {
        lblClick.Text = "This link is not allowed.";
        e.Cancel = true;
    }
    else
    {
        // Allow the redirect, and don't make any changes to the URL.
    }
}

主页(aspx)

<asp:dropdowncustom ID="dddone" runat="server" OnddAppClicked="dropdownclicked" />

控制(cs)

public partial class usercontrol_tests_dropdown1 : System.Web.UI.UserControl
{
    public event ddtestEventHandler ddAppClicked;
}

    public void selectapp_SelectedIndexChanged(object sender, EventArgs e)
    {
        ddtestEventArgs args = new ddtestEventArgs(selectlink.SelectedValue);
        ddAppClicked(this, args);
    }

类别:

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);

1 个答案:

答案 0 :(得分:2)

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

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;

以下是我认为有用的其他几个问题(如果我理解正确的话),这就是你正在做的事情: