我有一个带属性的用户控件(* .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 />
<% } %>
答案 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)
<%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 %>) {