C# 无法使用runat=";呈现html控件;服务器";动态地

C# 无法使用runat=";呈现html控件;服务器";动态地,c#,asp.net,runatserver,htmlcontrols,C#,Asp.net,Runatserver,Htmlcontrols,下面是我的一段代码,通过它我可以使用runat=“server”呈现html控件 var sb=new StringBuilder(); 某人加上一行(“”); sb.AppendLine(“更多产品”); sb.附录(“”); foreach(var引入列表) { var name=lead.ProductName; 如果(name.Length>17) { name=string.Format(“{0}…”,name.Substring(0,17)); } sb.AppendLine(字符串

下面是我的一段代码,通过它我可以使用runat=“server”呈现html控件

var sb=new StringBuilder();
某人加上一行(“”);
sb.AppendLine(“更多产品”);
sb.附录(“
    ”); foreach(var引入列表) { var name=lead.ProductName; 如果(name.Length>17) { name=string.Format(“{0}…”,name.Substring(0,17)); } sb.AppendLine(字符串格式(“
  • “, lead.ProductImagePath,name,lead.Id)); } sb.附录(“
”); ProductsBySame1.GetHtml=sb.ToString();//ProductsByName是usercontrol,GetHtml是放置在usercontrol中的div的innerHtml的属性。它是动态填充的。
我的输出:

<div id="ctl00_cphMain_ProductsBySame1_ltlProducts"> <div class='ItemDiv'>

 <h2>More Products </h2>

 <span class='separator'></span> <ul class='ulProducts'>

<li><img src='Uploads/Images/8e4c426aa1464af0b45f43c8c773e8ae.jpg' align='absmiddle' alt='Ceftriaxone Injec...'/> <span class='separator'> </span><a href='~/Item/659/Ceftriaxone Injec....aspx' **runat='server'**  style='font-size:8pt; text-transform: capitalize;'>Ceftriaxone Injec...</a> </li>

<li><img src='Uploads/Images/9efa7b61cf9f467393089ca111fc5f51.jpg' align='absmiddle' alt='Clavulanate Potas...'/> <span class='separator'> </span><a href='~/Item/660/Clavulanate Potas....aspx' **runat='server'**  style='font-size:8pt; text-transform: capitalize;'>Clavulanate Potas...</a> </li>

</ul> </div>

</div>

更多产品
见上文**。实际上,我正在使用UrlRewriting.Net模块重写URL。根据他们的文档,以~/开头的链接只起作用。因此,我在构建我的url时使用了~/并且因为~/只能与runat='server'一起使用

最后,我的问题是,我上面的href无法正常工作,因为在渲染时未解析runat='server'。根据我的使用场景,在呈现html时请帮助我


提前感谢。

当您使用designer中的
runat=“server”
添加控件时,Visual Studio会在
.designer.cs
文件中为其创建对象。因此,控件是在标记和代码隐藏中定义的。如果您是动态构建站点,则
页面
元素上没有对象

我建议您将控件添加到
CreateChildControls
方法中的
Page
。大概是这样的:

Page.Controls.Add(new Hyperlink() { Url="http://www.example.com" });

当您使用designer中的
runat=“server”
添加控件时,Visual Studio会在
.designer.cs
文件中为其创建对象。因此,控件是在标记和代码隐藏中定义的。如果您是动态构建站点,则
页面
元素上没有对象

我建议您将控件添加到
CreateChildControls
方法中的
Page
。大概是这样的:

Page.Controls.Add(new Hyperlink() { Url="http://www.example.com" });

runat=“server”仅用于告诉编译器在将aspx标记编译成类时要创建什么对象。您要做的是设置已编译控件的text属性,因此不会再进行其他编译。

runat=“server”仅用于告诉编译器在将aspx标记编译到类中时要创建什么对象。您要做的是设置已编译控件的text属性,这样就不会进行额外编译。

只需使用
Repeater
控件,而不是从头开始构建html:

<asp:Repeater ID="MyRepeater" runat="server">
    <HeaderTemplate>
        <div class="ItemDiv">
            <h2>More Products </h2>
            <span class='separator'></span>
            <ul class='ulProducts'>
    </HeaderTemplate>

    <ItemTemplate>
        <li>
            <img src="<%...%>" align="absmiddle" alt="<%...%>" /> 
            <span class='separator'> </span>
            <a href="<%...%>" runat="server" style="font-size:8pt; text-transform:capitalize;"><%...%></a>
        </li>
    </ItemTemplate>

    <FooterTemplate>
            </ul>
        </div>
    </FooterTemplate>
</asp:Repeater>




(为绑定添加了虚拟占位符)

只需使用
中继器
控件,而不是从头开始构建html:

<asp:Repeater ID="MyRepeater" runat="server">
    <HeaderTemplate>
        <div class="ItemDiv">
            <h2>More Products </h2>
            <span class='separator'></span>
            <ul class='ulProducts'>
    </HeaderTemplate>

    <ItemTemplate>
        <li>
            <img src="<%...%>" align="absmiddle" alt="<%...%>" /> 
            <span class='separator'> </span>
            <a href="<%...%>" runat="server" style="font-size:8pt; text-transform:capitalize;"><%...%></a>
        </li>
    </ItemTemplate>

    <FooterTemplate>
            </ul>
        </div>
    </FooterTemplate>
</asp:Repeater>




(添加了用于绑定的虚拟占位符)

你到底为什么不简单地使用类似于
Repeater
控件的东西来构建列表-你可以在ItemTemplate中使用任何服务器端控件。这是一个jquery滑块,我正在从代码中动态创建,我尝试过,我无法通过重复构建jquery滑块使用我的答案中的示例将为您提供完全相同的呈现html加上所需的url方案。。。非常感谢……)你到底为什么不简单地使用一个类似于
Repeater
控件的东西来构建你的列表-你可以在它的ItemTemplate中使用任何服务器端控件。这是一个jquery滑块,我正在用代码动态创建它,我试过,我无法通过重复构建jquery滑块使用我的答案中的示例将为您提供完全相同的呈现html加上所需的url方案。。。非常感谢……)