2009-07-03 6 views
2

У меня есть пользовательский элемент управления со свойством (* .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 /> 
<% } %> 

ответ

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

Thank you g. Ты действительно помог мне, хотя я не нашел более элегантного решения. С * .aspx стороны это выглядит так:

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

Где RenderControl ıA вспомогательную функцию:

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

Все параметра и функции должны быть объявлены с <%= 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 %>) { 
Смежные вопросы