我有一个ASP.net页面,其中包含一些控件。
我通过代码生成此控件,[实际上我有一个方法,它使用stringBuilder并将Serverside标记添加为平面字符串]
我的页面正确显示内容但不幸的是我的控件变得像客户端控件
例如,我在生成的代码上有一个不能正常工作的LoginView,而且我还从LocalResources读取了一些不会出现在页面上的字符串
如何才能使我的生成方法正确
这是代码
protected string CreateSubSystem(string id, string roles, string AnonymousTemplateClass, string href, string rolesContentTemplateClass, string LoggedInTemplateClass)
{
StringBuilder sb = new StringBuilder();
sb.Append("<div class=\"SubSystemIconPlacement\" id=\"");
sb.Append(id);
sb.Append("\"><asp:LoginView runat=\"server\" ID=\"");
sb.Append(id);
sb.Append("\"><AnonymousTemplate><div class=\"");
sb.Append(AnonymousTemplateClass);
sb.Append("\"></div><asp:Label ID=\"lblDisabled");
sb.Append(id);
sb.Append("\" runat=\"server\" SkinID=\"OneColLabel\" meta:resourcekey=\"lbl");
sb.Append(id);
sb.Append("\" /></AnonymousTemplate><RoleGroups><asp:RoleGroup Roles=\"");
sb.Append(roles);
sb.Append("\"><ContentTemplate><a class=\"ImageLink\" href=\"");
sb.Append(href);
sb.Append("\"><div class=\"");
sb.Append(rolesContentTemplateClass);
sb.Append("\"></div></a><asp:HyperLink runat=\"server\" CssClass=\"SubSystemText\" ID=\"lnk");
sb.Append(id);
sb.Append(" NavigateUrl=\"~/");
sb.Append(href);
sb.Append(" \" meta:resourcekey=\"lbl");
sb.Append(id);
sb.Append("\" /></ContentTemplate></asp:RoleGroup></RoleGroups><LoggedInTemplate><div class=\"");
sb.Append(LoggedInTemplateClass);
sb.Append("\"></div><asp:Label runat=\"server\" SkinID=\"OneColLabel\" ID=\"lblDisabledLoggedIn");
sb.Append(id);
sb.Append("\" meta:resourcekey=\"lbl");
sb.Append(id);
sb.Append("\" /></LoggedInTemplate></asp:LoginView>");
sb.Append("</div>");
return sb.ToString();
}
我也在page_PreRender事件
上使用此方法答案 0 :(得分:2)
您需要实例化服务器端控件,然后将它们附加到父节点。您无法在客户端上转储标记以获得服务器端控制。
由于asp.net引擎使用服务器控件,然后为您呈现正确的客户端标记。所以一旦在客户端端,并从服务器端释放
Dim t As TextBox
t = New TextBox
PlaceHolder1.Controls.Add(t)
试试这个This simple expample。希望有所帮助:)