簡體   English   中英

如何動態生成服務器端標簽

[英]How to Generate Server-Side tags dynamiclly

我有一個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事件上使用此方法

您需要實例化服務器端控件,然后將它們附加到父節點。 您不能在客戶端上轉儲標記以獲取服務器端控制。

asp.net引擎消耗服務器控件,然后為您呈現正確的客戶端標記。 因此,一旦在客戶端即可從服務器端釋放

Dim t As TextBox
t = New TextBox
PlaceHolder1.Controls.Add(t)

試試這個簡單的例子 希望有幫助:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM