私は 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>
このリストにはホバー動作などがあります。プロジェクト全体で同じスタイルのリストを再利用したいと思いますが、データが異なるだけです (実際には 3 行を<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に比較的慣れていません)
これが良い方法かどうかもわかりません。以前は、テンプレート化されたユーザー コントロールにすることを考えていましたが、この方法の方が簡単に思えて、方法を既に知っていたので、そう思っていました。ですから、これに関するどんな助けも大歓迎です、ありがとう!
編集:明確にするために、ここで強調したいのは、この特定のコントロールの再利用性です。そのため、このスタイルのリスト (クリック可能、ハイライト動作など) でさまざまな種類のデータ レコードを表示できます。