プロが教えるわが家の防犯対策術!

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 %>

基本的なことですみませんがよろしくお願いします。検索の仕方が悪いのか自分で調べることができませんでした。

A 回答 (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とプログラムコードが分離しているので、こんな感じになります。

この回答への補足

以下のエラーになってしまいました。lnkProjectsがデータリストのItemTemplateに入っているからか、参照できないみたいです。

The name 'lnkProjects' does not exist in the current context.

補足日時:2009/11/11 03:20
    • good
    • 0
この回答へのお礼

自己解決しました。

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;
}
}
}

お礼日時:2009/11/11 09:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A