Давно уже пишу на ASP.NET MVC, но есть старые проекты на WebForms, которые нужно поддерживать. Возникла проблема, как передать параметр в UserControl. Пример кода:
Страничка *.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 />
<% } %>
Так вот, переменную "p" воспринимается как строка.
Есть два метода решения:
1) На страничка 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) В коде странички пишем:
foreach (Person p in persons)
{
control = LoadControl("~/App_Controls/PersonAccessStatus.ascx")
as PersonAccessStatus;
control.Person = p;
SomeContainer.Controls.Add(control);
}
|
Спасибо! Очень помогло!