2009-07-03 21 views
2

ich eine Benutzersteuerung mit der Eigenschaft (* .acsx.cs) haben:User Control mit Eingangsparameter

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

    } 
} 

Gibt es eine Möglichkeit Parameter an diese Steuerung in * .aspx zu passieren, so etwas wie dieses

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

Antwort

4

Ja. Sie können eine Eigenschaft auf dem Benutzersteuerelement erstellen. Ich benutze es normalerweise, um Funktionen eines Steuerelements zu aktivieren oder zu deaktivieren. Es ist einfach, einen Wert im aspx zuzuweisen.

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

Ich bin über die Syntax für Ihr Beispiel nicht sicher, wie ich in der Regel Code halten aus dem aspx, also würde ich in den Code, um die Schleife zu tun.

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

    control.Person = p; 

    SomeContainer.Controls.Add(control); 
} 
2

Vielen Dank g. Du hast mir wirklich geholfen, obwohl ich keine elegantere Lösung gefunden habe. Von * .aspx Seite sieht es so:

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

Wo Render eine Hilfsfunktion ia:

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(); 
} 
0

Alle Parameter und Funktionen müssen mit <%= this.ID %> in der asp Benutzerkontrolle deklariert werden, es zu benutzen mehr als einmal.

Zum Beispiel:

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

oder

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