2017-09-26 5 views
1

私はユーザーが自分のプロジェクトで行ったそれぞれのコメントを編集できるようにしようとしています。私がしたいのは、セッション中の現在のユーザーと、それぞれのコメントを行ったユーザーの評価値を一致させることです。hrefが特定の条件で表示されるようにする方法。 ASP.NET C#

<% if (Session["user"] != null && Session["user"] == Eval("first_name")) 
      { 
       %> 

     <a href="#">Edit</a> 

     <% 
      } 
      else 
      { 

      } 
      %> 

はしかし、それはエラーを与える:

'Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control.'

ここでは完全なコードです:以下は、私がこれまでに行ったことある

<asp:Repeater ID="r2" runat="server" OnItemCommand="r2_ItemCommand"> 
    <HeaderTemplate> 



    </HeaderTemplate> 
    <ItemTemplate> 

    <% if (Session["user"] != null) 
      { 
       %> 
     <br /> 
     <asp:Hyperlink runat="server" ID="myLink" Text="Edit" Visible="false"></asp:Hyperlink> 
     <% 
      } 
      else 
      { 

      } 
      %> 
      <br /> <%#Eval("title") %><br /> 
      By <%#Eval("first_name") %> <%#Eval("last_name") %> on <%#Eval("date") %><br /> 

    </ItemTemplate> 
    <FooterTemplate> 

    </FooterTemplate> 
</asp:Repeater><br /> 

は、この問題を解決する方法上の任意のアイデアをか実行できるより良い解決策はありますか?

+0

エラー状態。あなたですか?もしそうなら、 'Eval(" first_name ")'は何をすると思いますか?どうして?この 'if'文でチェックしようとしている条件は何ですか? – David

+1

'HyperLink'コントロールを使用して、コードの背後から可視性を設定することができます。 – VDWWD

答えて

1

Evalは、サーバーコントロールでバインド可能なプロパティを設定している場合にのみ機能します。

これを行うには、サーバーコントロールコンテナを使用するか、aspハイパーリンクコントロールを作成します。あなたは、データバインドコントロールのコンテキスト外でこれを実行しようとしている

HTML

<asp:Hyperlink runat="server" ID="myLink" Text="edit" Visible="false"></asp:Hyperlink> 

C#

if (Session["user"] != null && Session["user"] == myObject.first_name)) 
    myLink.Visible = true; 
+0

RepeaterのItem Template内にハイパーリンクを表示しようとしているので、myLinkはC#ページで検出できません。 –

+0

リピータのItemDataBoundイベント(繰り返しごとに発生する)では、FindControlを実行してハイパーリンクを検索します。ここに良い例があります。 https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemdatabound(v=vs.110).aspx – Seano666

関連する問題