【问题标题】:C# ASP.NET update panel inside a repeater errorC# ASP.NET 更新面板内部出现中继器错误
【发布时间】:2012-01-28 01:03:04
【问题描述】:

当我将更新面板放入转发器控件时出现问题,我收到错误,当用户单击链接按钮时,我只需要刷新一个帖子,这是我的代码...

    <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:如果我删除了更新面板并将其放在中继器之外,它会起作用(更新面板内的中继器而不是中继器内的更新面板,但这不是我想要的)

【问题讨论】:

  • 在Container.DataItem中,容器是直接父控件。将更新面板包裹在其上时,父级将成为更新面板,而不是中继器。我认为你应该使用中继服务器端事件来设置正确的值。
  • @Akhil Thnx 错误通过将 DataBinder.Eval(Container.DataItem, "coloumn_name") 替换为 Eval("Coloumn_name") 来解决,但是当用户点击一个按钮你能帮我吗?
  • 按钮在更新面板内部还是外部?
  • 它在里面,和我发布的代码一样,但我只是用 Eval("Coloumn_name") 替换了 DataBinder.Eval(Container.DataItem, "coloumn_name"),按钮是 ,当我点击它时,我想做回发,以便刷新 div-post,这就像我想要实现的带有类似按钮的 facebook
  • @Akhil 所以我想做的就是刷新用户按下按钮“喜欢”的帖子

标签: c# asp.net


【解决方案1】:

另一种解决方案是将 Container 转换为 IDataItemContainer (((IDataItemContainer)Container))。

代替:

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

用途:

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

如果您将 DataItem 转换为对象,此解决方案非常理想,例如:

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

这就变成了:

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

【讨论】:

    【解决方案2】:

    将更新面板放在中继器的一侧。它会起作用的。

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

    【讨论】:

    • 当用户单击任何链接按钮时,我只想刷新 1 个帖子,但是通过将 updatepanel 放在它外面会刷新转发器的全部内容但是我找到了一种让它工作的方法,但我仍然有一个问题我无法强制转发器内的链接按钮进行回发
    • 这不是原始问题的可接受解决方案,因为它从根本上改变了页面的行为以消除错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多