我正在使用 ASP.NET Web 窗体,并且我有一个Repeater
控件来显示一些数据。目前它看起来像这样:
<asp:Repeater runat="server" ID="blah" OnItemDataBound="blah" OnItemCommand="blah">
<HeaderTemplate>
<ul class="itemList">
</HeaderTemplate>
<ItemTemplate>
<li runat="server" id="listItem" class="itemNormal" onmouseover="this.className = 'itemHover';" onmouseout="this.className = 'itemNormal';">
<asp:LinkButton runat="server" ID="btn_select" CommandName="Select" Text="Select" style="display: none;"></asp:LinkButton>
<strong>Date/Time:</strong> <%# DataBinder.Eval(Container.DataItem, "date") %><br />
<strong>Details:</strong> <%# DataBinder.Eval(Container.DataItem, "details") %><br />
<strong>Status:</strong> <%# DataBinder.Eval(Container.DataItem, "status") %><br />
</li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
该列表具有悬停行为等,我想在我的项目中重用相同样式的列表,只是使用不同的数据(实际上只是用标签替换三行<strong>
)。但是,我显然不想在每次使用时都复制粘贴并更改它,所以我想我会尝试将其变成用户控件:
<asp:Repeater runat="server" ID="blah" OnItemDataBound="blah" OnItemCommand="blah">
<HeaderTemplate>
<ul class="itemList">
</HeaderTemplate>
<ItemTemplate>
<li runat="server" id="listItem" class="itemNormal" onmouseover="this.className = 'itemHover';" onmouseout="this.className = 'itemNormal';">
<asp:LinkButton runat="server" ID="btn_select" CommandName="Select" Text="Select" style="display: none;"></asp:LinkButton>
<%= DataString %>
</li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
在我在 CodeBehind 中的相应课程中:
public string DataString { get; set; }
所以我的主要目标是这样做:
<uc:MyUserControl runat="server" ID="blah" DataString="<strong>Date/Time:</strong><%# DataBinder.Eval(Container.DataItem, "date") %> ETC..." />
但似乎 ASP.NET 想要评估<% %>
字符串中的 ,然后我尝试了不同的方法来解决它,例如:
<% string theDataString = "<strong>Date/Time:</strong> <%# DataBinder.Eval(Container.DataItem, "date") %>"; %>
<uc:MyUserControl runat="server" ID="blah" DataString='<%= theDataString %>' />
%>
但是我在关闭时再次遇到了麻烦,theDataString
即使用类似的东西替换它{0: %}
(为了逃避 % 符号:不记得确切的语法),它确实正确地逃避了它,我发现你实际上不能使用里面的<%= %>
一个属性,这很烦人。
我最后的尝试是DataString
在我的页面的 CodeBehind 中设置,并且 HTML<strong>
正确呈现,但是 ASP.NET 没有评估它<%# %>
,只是按字面意思吐出来。所以我有点卡住了,因为我想不出其他任何东西......(顺便说一下,我对 ASP.NET 还是比较陌生)
我什至不确定这是否是一个好方法——以前我曾考虑将它变成一个模板化的用户控件,但这种方法似乎更简单,而且我已经知道该怎么做,或者我是这么认为的。因此,我们将不胜感激任何帮助,谢谢!
编辑:为了清楚起见,我在这里强调的是这个特定控件的可重用性——所以我将能够以这种列表样式显示不同类型的数据记录(可点击、突出显示行为等)。