2012-01-28 14 views
3

我有一個問題,一個UpdatePanel,當我把它放在一箇中繼器控制我得到一個錯誤裏面,我需要刷新只有一個門柱內側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'的第一個參數(你是否缺少使用指令或程序集引用?)。 這讓我非常沮喪,請大家幫忙。 PS:它的工作原理,如果我刪除了UpdatePanel中,並使其中繼器外(在UpdatePanel而不是轉發裏面的UpdatePanel內的中繼器,但是這不是我想要的)

+0

在Container.DataItem中,容器是imediate父控件。將更新面板包裝在其上時,父級成爲更新面板,而不是中繼器。我認爲你應該使用Repeater服務器端事件來設置正確的值。 – Akhil 2012-01-28 01:16:18

+1

@Akhil日Thnx錯誤是通過更換DataBinder.Eval的解決(的Container.DataItem,「coloumn_name」)用的eval(「Coloumn_name」),但有一個問題如何強制執行後回來時,在用戶點擊按鈕,你可以幫我 ? – 2012-01-28 01:28:58

+0

按鈕在更新面板內還是外面? – Akhil 2012-01-28 01:34:55

回答

-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

我想,當用戶點擊任何LinkBut​​ton的,但通過把UpdatePanel的外面將刷新轉發器的全部內容,但是我找到了一種方法,使其工作,但我仍然有一個問題,我不能強迫刷新只有1篇文章linkbutton裏面的中繼器做回發 – 2012-01-28 09:03:52

+3

這不是一個可接受的解決方案,原來的問題,因爲它從根本上改變頁面的行爲,以消除錯誤。 – DaveD 2012-03-30 15:11:32

2

另一種解決方案是將容器作爲IDataItemContainer(((IDataItemContainer)Container))投出。

相反的:

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

用途:

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

該解決方案是理想的,如果你是鑄造的DataItem作爲對象,例如:

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

這成爲:

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