带输入参数的用户控制

时间:2009-07-03 14:52:24

标签: asp.net user-controls

我有一个带属性的用户控件(* .acsx.cs):

public partial class controls_PersonAccessStatus : System.Web.UI.UserControl
{
    public Person Person { get; set; }   
    protected void Page_Load(object sender, EventArgs e)
    {

    }
}

有没有办法在* .aspx中将参数传递给此控件,类似这样

<%  foreach (Person p in persons) {  %>
        <uc:PersonAccessStatus ID="PersonAccessStatus" runat="server" Person=p />
<%  } %>

3 个答案:

答案 0 :(得分:4)

是。您可以在UserControl上创建属性。我通常用它来启用或禁用控件的功能。在aspx中分配值很简单。

<uc:PersonAccessStatus ID="PersonAccessStatus" runat="server" EnableSomething="true" />

我不确定你的例子的语法,因为我通常将代码保留在aspx之外,所以我会在代码中进行循环。

foreach (Person p in persons)
{
    control = LoadControl("~/App_Controls/PersonAccessStatus.ascx") 
        as PersonAccessStatus;

    control.Person = p;

    SomeContainer.Controls.Add(control);
}

答案 1 :(得分:2)

谢谢你。你真的帮了我,虽然我还没找到更优雅的解决方案。从* .aspx方面看起来如此:

<%foreach (Person p in persons) 
  {          
    controls_PersonAccessStatus control = LoadControl("~/App_Controls/PersonAccessStatus.ascx") as controls_PersonAccessStatus;
    control.Person = p;  %>
    <%=RenderControl(control) %>      
<%}%>

RenderControl是辅助函数的地方:

public string RenderControl(Control ctrl)
{
    StringBuilder sb = new StringBuilder();
    StringWriter tw = new StringWriter(sb);
    HtmlTextWriter hw = new HtmlTextWriter(tw);

    ctrl.RenderControl(hw);
    return sb.ToString();
}

答案 2 :(得分:0)

必须在asp用户控件中使用<%= this.ID %>声明所有参数和函数,以便多次使用它。

例如:

var ii<%= this.ID %> = 0;

function load_2v<%= this.ID %> ()
{
    var BI1 = document.getElementById("<%= Li1.ClientID %>");
    var BI2 = document.getElementById("<%= Li2.ClientID %>");
    switch (ii<%= this.ID %>) {