C# 无法使用runat=";呈现html控件;服务器";动态地
下面是我的一段代码,通过它我可以使用runat=“server”呈现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(字符串
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方案。。。非常感谢……)