1

次のコードがあります。

<asp:LinkButton runat="server" 
                CommandName="SwitchStep"
                CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ID")%>'
                CssClass="<%# some conditional code here %> activestep">
    Step <%# Container.ItemIndex + 1 %>: <%# DataBinder.Eval(Container.DataItem, "ID")%>
</asp:LinkButton>

インラインステートメントはCommandArgument属性で機能し、テキスト属性で機能することはわかっています。しかし、何らかの理由で、このCssClass属性では、インライン ステートメントが HTML 出力で (解析されずに) 終了します。なんてこったい?

Chrome の場合:

<a class="&lt;%= 'steptab' %&gt;" href='javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("StepControl:_ctl1:_ctl0", "", true, "", "", false, true))'>
            Step 1: section_name</a>

誰もこれに遭遇したことがありますか?なぜこれが機能しないのかわかりません。論理的ではないようで、少しイライラしています。

いくつかのメモ:

  • ここに「?」などの当てはまらない文字を入れると、(これは VB です)、コンパイラは文句を言います。
  • すべてのサーバー タグ (<%、<%# など) が HTML に表示されます。
  • これはリピーター コントロール内にあります。待ってください、それはコードにあります。
  • インライン ステートメントの後に「activestep」クラスを削除すると、インライン ステートメントは引き続き表示されますが、HTML にクラス属性がまったく表示されなかったことがあります。

何か案は?ご協力いただきありがとうございます!

4

2 に答える 2

1

を使用してCssClassを構築できますString.Format()

CssClass='<%# String.Format("{0} activestep", If(condition, "truestring", "falsestring"))%>'>
于 2013-01-30T22:12:35.643 に答える
0

CssClassプロパティに Expression を記述できるかどうかわかりません。これを試して:

<asp:LinkButton runat="server" 
                CommandName="SwitchStep"
                CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ID")%>'
                CssClass="<%$ Iif(condition, "activestep", "") %>">
    Step <%# Container.ItemIndex + 1 %>: <%# DataBinder.Eval(Container.DataItem, "ID")%>
</asp:LinkButton>

一方、ItemDataBoundイベント ハンドラーを使用して条件をラッパーCssClassし、Repeater 内のコントロールにプロパティを設定することができます。見てみる

WEbForm で、ItemDataBound への参照を追加します。

<asp:Repeater id="Repeater1" OnItemDataBound="Repeater1_ItemDataBound" runat="server">
...
</asp:Repeater>

VB.NET

' This event is raised for the header, the footer, separators, and items.
Public Sub Repeater1_ItemDataBound(sender As Object, e As RepeaterItemEventArgs) 

    ' Execute the following logic for Items and Alternating Items.
    if e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then

        Dim p as Product = CType(e.Item.DataItem, Product) ' cast to your entity just a sample

        If p.Active Then ' check some condition     

            CType(e.Item.FindControl("Your_LinkButtonId"), LinkButton).CssClass = "activestep"

        End If
    End if

End Sub

C#

// This event is raised for the header, the footer, separators, and items.
public void Repeater1_ItemDataBound(Object sender, RepeaterItemEventArgs e) 
{
    // Execute the following logic for Items and Alternating Items.
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    {
        Product p = (Product)e.Item.DataItem; // cast to your entity just a sample

        if (p.Active) // check some condition
        {
            ((LinkButton)e.Item.FindControl("Your_LinkButtonId")).CssClass = "activestep";
        }
    }  
}
于 2013-01-30T18:45:56.283 に答える