• 締切済み

aspxでIFみたいなことがしたい

aspxファイルで、以下のようにデータリストを使用しています。 <asp:DataList ID="datalistBiographies" runat="server" RepeatDirection="Horizontal" Width="100%"> <ItemTemplate> <p> <a href='BiographyInfo.aspx?id=<%# Eval("BiographyID") %>'>View Biography</a><br /> <a id="lnkProjects" href='<%#Eval("ProjectPicture") %>'>Submitted Projects</a> </p> </ItemTemplate> </asp:DataList> ここで、ProjectPictureの値が空文字列のときにこの<a>タグを表示したくないのですが、ASPのときは以下のようにしましたがASP.Netではどのようにすればいいでしょうか? <% If (Not Len(ProjectPicture) > 0) Then %> <a id="lnkProjects" href='<%#Eval("ProjectPicture") %>'>Submitted Projects</a> <% End If %> 基本的なことですみませんがよろしくお願いします。検索の仕方が悪いのか自分で調べることができませんでした。

みんなの回答

回答No.1

<asp:DataList ID="datalistBiographies" runat="server" RepeatDirection="Horizontal" Width="100%"> <ItemTemplate> <p> <a href='BiographyInfo.aspx?id=<%# Eval("BiographyID") %>'>View Biography</a><br /> <a runat="server" id="lnkProjects" href="">Submitted Projects</a> </p> </ItemTemplate> </asp:DataList> <script runat="server"> Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) If ProjectPicture.Length = 0 Then Me.lnkProjects.Visible = False Else Me.lnkProjects.Href = ProjectPicture End If End Sub </script> ASPXではHTMLとプログラムコードが分離しているので、こんな感じになります。

stoutontap
質問者

お礼

自己解決しました。 DataListのItemDataBoundイベントを以下のように実装しました。 protected void datalistProjects_ItemDataBound(object sender, DataListItemEventArgs e) { if (e.Item.DataItem is DataRowView) { DataRowView row = (DataRowView)e.Item.DataItem; if (row["ProjectPicture"] == null || row["ProjectPicture"].ToString().Length == 0) { WebControl link = (WebControl)e.Item.FindControl("lnkProjects"); link.Visible = false; } } }

stoutontap
質問者

補足

以下のエラーになってしまいました。lnkProjectsがデータリストのItemTemplateに入っているからか、参照できないみたいです。 The name 'lnkProjects' does not exist in the current context.