当我将updatepanel放在中继器控件中时遇到问题,并且出现错误,并且当用户单击链接按钮时,我只需要刷新一条帖子,这是我的代码...
<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,但这不是我想要的)
最佳答案
另一个解决方案是将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 %>
关于c# - 中继器错误内的C#ASP.NET更新面板,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9042057/