2012-01-28 26 views
3

リピーターコントロール内に置いたときにupdatepanelに問題があります。エラーが表示され、ユーザーがリンクボタンをクリックしたときに1つのポストのみを更新する必要があります、ここに私のコードがある...リピーターエラー内のC#ASP.NETアップデートパネル

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
        </asp:ScriptManager> 
          <asp:Repeater ID="Repeater1" runat="server" 
           OnItemCommand="MyButtonCommandEvent"> 
           <ItemTemplate> 
           <asp:UpdatePanel ID="UpdatePanel3" runat="server"> 
         <ContentTemplate> 
            <div class="post"> 
             <asp:HiddenField ID="postID_hidden" runat="server" 
              Value='<%# DataBinder.Eval(Container.DataItem,"posts_ID") %>' /> 
             <div class="Thumb"> 
              <img src="thumbs/abdo_thumb.jpg"> </img></div> 
             <span class="user"><%#DataBinder.Eval(Container.DataItem, "poster_name")%> 
             </span> 
             <div class="post-body"> 
              <p> 
               <%#DataBinder.Eval(Container.DataItem,"description")%> 
              </p> 
             </div> 
             <div class="post-options" style=" height:22px; "> 
              <span class="first"><%#DataBinder.Eval(Container.DataItem,"post_date")%></span> 
              <ul style="display:inline; list-style-type: none;"> 
               <li> 
                <div class="tooltip"> 
                 Comments 
                 <img class="tool-img" src="Images/comments.png"> : <%#DataBinder.Eval(Container.DataItem,"comment_num") %> 
                 </img> 
                </div> 
               </li> 
               <li> 
                <div class="tooltip"> 
                 <asp:LinkButton ID="like_linkbtn" runat="server" CommandName="Like"><%#(DataBinder.Eval(Container.DataItem, "name_like").ToString() == "") ? "Like" : DataBinder.Eval(Container.DataItem, "name_like")%></asp:LinkButton> 
                 <img class="tool-img" src="images/likes.png"> : <%#DataBinder.Eval(Container.DataItem,"like_counter") %> 
                 </img></div> 
               </li> 
               <li> 
                <div class="tooltip"> 
                 <asp:LinkButton ID="hate_linkbtn" runat="server" CommandName="Hate"><%#(DataBinder.Eval(Container.DataItem, "name_hate").ToString() == "") ? "Hate" : DataBinder.Eval(Container.DataItem, "name_hate")%></asp:LinkButton> 
                 <img class="tool-img" src="images/hate.png"> : <%#DataBinder.Eval(Container.DataItem,"hate_counter") %> 
                 </img></div> 
               </li> 
              </ul> 
             </div> 
             <div class="finish"> 
             </div> 
            </div> 
            </ContentTemplate> 
        </asp:UpdatePanel> 
           </ItemTemplate> 
          </asp:Repeater> 

エラーは次のとおりです。コンパイラエラーメッセージ:CS1061:「System.Web.UI.Controlは」「のDataItem」となし拡張メソッド「のDataItem」の定義が含まれていません。 'System.Web.UI.Control'型の最初の引数を受け入れることができました(usingディレクティブまたはアセンブリ参照がありませんか?)。 これは本当に私を助けてください。 PS:updatepanelを削除してリピータの外側に作った場合(リピータ内のupdatepanelの代わりにupdatepanelのリピータが必要です)、

+0

Container.DataItemでは、コンテナはimediateの親コントロールです。更新パネルをその上にラップすると、親はリ​​ピータではなく更新パネルになります。私はyyou正しい値を設定するには、Repeater Serverのサイドイベントを使用する必要がありますと思う。 – Akhil

+1

@Akhil Thnxエラーは、DataBinder.Eval(Container.DataItem、 "coloumn_name")をEval( "Coloumn_name")に置き換えることで解決されますが、ユーザーがボタンをクリックしたときにポストバックを強制する方法助けて ? –

+0

更新パネル内のボタンまたはその外側 – Akhil

答えて

-1

アップデートパネルをリピータの外側に置きます。それが動作します。

       <asp:UpdatePanel ID="UpdatePanel3" runat="server"> 
         <ContentTemplate> 
<asp:Repeater ID="Repeater1" runat="server" 
           OnItemCommand="MyButtonCommandEvent"> 
           <ItemTemplate> 
            <div class="post"> 
             <asp:HiddenField ID="postID_hidden" runat="server" 
              Value='<%# DataBinder.Eval(Container.DataItem,"posts_ID") %>' /> 
             <div class="Thumb"> 
              <img src="thumbs/abdo_thumb.jpg"> </img></div> 
             <span class="user"><%#DataBinder.Eval(Container.DataItem, "poster_name")%> 
             </span> 
             <div class="post-body"> 
              <p> 
               <%#DataBinder.Eval(Container.DataItem,"description")%> 
              </p> 
             </div> 
             <div class="post-options" style=" height:22px; "> 
              <span class="first"><%#DataBinder.Eval(Container.DataItem,"post_date")%></span> 
              <ul style="display:inline; list-style-type: none;"> 
               <li> 
                <div class="tooltip"> 
                 Comments 
                 <img class="tool-img" src="Images/comments.png"> : <%#DataBinder.Eval(Container.DataItem,"comment_num") %> 
                 </img> 
                </div> 
               </li> 
               <li> 
                <div class="tooltip"> 
                 <asp:LinkButton ID="like_linkbtn" runat="server" CommandName="Like"><%#(DataBinder.Eval(Container.DataItem, "name_like").ToString() == "") ? "Like" : DataBinder.Eval(Container.DataItem, "name_like")%></asp:LinkButton> 
                 <img class="tool-img" src="images/likes.png"> : <%#DataBinder.Eval(Container.DataItem,"like_counter") %> 
                 </img></div> 
               </li> 
               <li> 
                <div class="tooltip"> 
                 <asp:LinkButton ID="hate_linkbtn" runat="server" CommandName="Hate"><%#(DataBinder.Eval(Container.DataItem, "name_hate").ToString() == "") ? "Hate" : DataBinder.Eval(Container.DataItem, "name_hate")%></asp:LinkButton> 
                 <img class="tool-img" src="images/hate.png"> : <%#DataBinder.Eval(Container.DataItem,"hate_counter") %> 
                 </img></div> 
               </li> 
              </ul> 
             </div> 
             <div class="finish"> 
             </div> 
            </div> 
           </ItemTemplate> 
          </asp:Repeater> 

            </ContentTemplate> 
        </asp:UpdatePanel> 
+0

ユーザーがリンクボタンをクリックしたときに1つだけポストを更新したいのですが、updatepanelを外に置くことでリピーターの内容全体がリフレッシュされますが、動作させる方法を見つけましたが、ポストバックを行うリピータ内のlinkbutton –

+3

これは、エラーを取り除くためにページの動作を根本的に変更するため、元の質問に対する許容可能な解決策ではありません。 – DaveD

2

もう1つの解決策は、IDataItemContainer(((IDataItemContainer)Container))としてコンテナをキャストすることです。

の代わりに:

<%# DataBinder.Eval(Container.DataItem, "Column") %> 

用途:あなたは例えば、オブジェクトとしてのDataItemをキャストしている場合

<%# DataBinder.Eval(((IDataItemContainer)Container).DataItem, "Column") %> 

このソリューションは理想的である:

<%# ((MyClass)Container.DataItem).ColumnName %> 

これは次のようになります。

<%# ((MyClass)((IDataItemContainer)Container).DataItem).ColumnName %> 
関連する問題