标签在更新面板内的转发器内不可见

发布于 2024-08-14 18:45:44 字数 3251 浏览 2 评论 0原文

我有一个包含中继器的 UpdatePanel。在转发器的 ItemTemplate 中有一个按钮和一个标签。

当按钮被按下时,它会执行一些功能,然后将标签设置为可见并禁用按钮。

但是,网页的 UI 并未发生任何更改。

这是代码,在调试器中单步执行时似乎工作正常:

protected void CommentRepeater_ItemCommand(object source, RepeaterCommandEventArgs e)
{
    if (e.CommandName == "report")
    {
        (e.Item.FindControl("btnReportComment") as ImageButton).Enabled = false;
        Label thanksLabel = (Label)e.Item.FindControl("lblReportedComment");
        thanksLabel.Visible = true;
    }

    pnlCommentsUpdater.Update();
}

以及页面的代码(不包括转发器之外的代码)

<asp:UpdatePanel UpdateMode="Conditional" ID="pnlCommentsUpdater" runat="server">
    <ContentTemplate>
        <asp:LinkButton ID="lnkPhoto1Comments" runat="server" Text="0 Comments" OnClick="lnkPhoto1Comments_Click" CssClass="dark-gray regular bold"></asp:LinkButton>      
        <asp:Panel ID="pnlPhoto1Comments" runat="server" Visible="False">
        <asp:Repeater ID="Repeater1" runat="server" OnItemCommand="CommentRepeater_ItemCommand">
            <ItemTemplate>
                <br />
                <hr width="100%" size="1" color="#CCCCCC" />
                <table width="534" cellpadding="0" cellspacing="0" border="0">
                    <tr>
                        <td width="150" align="left" valign="top">
                            <span class="blue small bold"><%# Eval("PostedBy") %>,</span><br />
                            <span class="light-gray small bold"><%# Eval("DateCreated", "{0:g}") %></span>
                        </td>
                        <td width="20"></td>
                        <td width="252" align="left" valign="top">
                            <div STYLE="word-wrap:break-word;width:252px;left:0">
                                <span class="dark-gray small bold"><%# Eval("CommentText") %></span>
                            </div>
                        </td>
                        <td width="20"></td>
                        <td width="92" valign="bottom">
                            <asp:ImageButton ID="btnReportComment" runat="server" ImageUrl="../images/inappropriate_off.png" CssClass="domclickroll images/inappropriate_on.png images/inappropriate_on.png" AlternateText="Inappropriate" CommandName="report" CommandArgument='<%#Eval("CommentId") %>' /><br />
                            <asp:Label ID="lblReportedComment" runat="server" Visible="false" CssClass="Regular bold blue" Text="Thanks. We'll check it out!"></asp:Label>
                        </td>
                    </tr>
                </table>
            </ItemTemplate>
        </asp:Repeater>

正如我所说,调试器显示它工作正常,但是它根本不显示标签单击按钮后的浏览器。

有人知道我做错了什么吗?

错误是:“Sys.WebForms.PageRequestManagerParserErrorException:无法解析从服务器收到的消息。此错误的常见原因是通过调用 Response.Write()、响应过滤器、HttpModules 或服务器跟踪来修改响应已启用。”

我在页面加载中调用

ScriptManager.GetCurrent(Page).RegisterPostBackControl(Repeater1); 

,我在一些网站上读到的是解决方案,但它没有帮助。

I have an UpdatePanel that contains a Repeater. in the ItemTemplate of the repeater there is a button and a label.

When the button gets pressed, it performs some functionality, and then sets the label to visible and disables the button.

However none of the UI changes are being made to the webpage.

Here is the code, which when stepping through in debugger appears to work fine:

protected void CommentRepeater_ItemCommand(object source, RepeaterCommandEventArgs e)
{
    if (e.CommandName == "report")
    {
        (e.Item.FindControl("btnReportComment") as ImageButton).Enabled = false;
        Label thanksLabel = (Label)e.Item.FindControl("lblReportedComment");
        thanksLabel.Visible = true;
    }

    pnlCommentsUpdater.Update();
}

and the page's code (excluding code outside of the repeater)

<asp:UpdatePanel UpdateMode="Conditional" ID="pnlCommentsUpdater" runat="server">
    <ContentTemplate>
        <asp:LinkButton ID="lnkPhoto1Comments" runat="server" Text="0 Comments" OnClick="lnkPhoto1Comments_Click" CssClass="dark-gray regular bold"></asp:LinkButton>      
        <asp:Panel ID="pnlPhoto1Comments" runat="server" Visible="False">
        <asp:Repeater ID="Repeater1" runat="server" OnItemCommand="CommentRepeater_ItemCommand">
            <ItemTemplate>
                <br />
                <hr width="100%" size="1" color="#CCCCCC" />
                <table width="534" cellpadding="0" cellspacing="0" border="0">
                    <tr>
                        <td width="150" align="left" valign="top">
                            <span class="blue small bold"><%# Eval("PostedBy") %>,</span><br />
                            <span class="light-gray small bold"><%# Eval("DateCreated", "{0:g}") %></span>
                        </td>
                        <td width="20"></td>
                        <td width="252" align="left" valign="top">
                            <div STYLE="word-wrap:break-word;width:252px;left:0">
                                <span class="dark-gray small bold"><%# Eval("CommentText") %></span>
                            </div>
                        </td>
                        <td width="20"></td>
                        <td width="92" valign="bottom">
                            <asp:ImageButton ID="btnReportComment" runat="server" ImageUrl="../images/inappropriate_off.png" CssClass="domclickroll images/inappropriate_on.png images/inappropriate_on.png" AlternateText="Inappropriate" CommandName="report" CommandArgument='<%#Eval("CommentId") %>' /><br />
                            <asp:Label ID="lblReportedComment" runat="server" Visible="false" CssClass="Regular bold blue" Text="Thanks. We'll check it out!"></asp:Label>
                        </td>
                    </tr>
                </table>
            </ItemTemplate>
        </asp:Repeater>

As I said, the debugger shows it to be working fine, however it simply doesn ot show the label in the browser after clicking the button.

Anyone know what I'm doing wrong?

The error is: "Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed. Common causes for this error are when the response is modified by calls to Response.Write(), response filters, HttpModules, or server trace is enabled."

And I am calling

ScriptManager.GetCurrent(Page).RegisterPostBackControl(Repeater1); 

in the page load, which I read in some sites is the solution, but it did not help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

も星光 2024-08-21 18:45:44

查看此博客文章...

http://weblogs.asp.net/leftslipper/archive/2007/02/26/sys-webforms-pagerequestmanagerparsererrorexception-what-it-is-and-how- to-avoid-it.aspx

它包含许多解决此问题的方法。关于您的电话...

ScriptManager.GetCurrent(Page).RegisterPostBackControl(Repeater1);

...我认为您应该将按钮传递给 RegisterPostBackControl,而不是转发器。即传递它 btnReportComment 。从上面的参考...

3.调用ScriptManager.RegisterPostBackControl()
并传入有问题的按钮。
这是控制的最佳解决方案
动态添加的,例如
重复模板内的内容。

Check out this blog post...

http://weblogs.asp.net/leftslipper/archive/2007/02/26/sys-webforms-pagerequestmanagerparsererrorexception-what-it-is-and-how-to-avoid-it.aspx

It contains a number of approaches to fixing this. With respect to your call...

ScriptManager.GetCurrent(Page).RegisterPostBackControl(Repeater1);

... I think you're supposed to pass the button to RegisterPostBackControl, and not the repeater. i.e pass it btnReportComment instead. From the reference above...

3.Call ScriptManager.RegisterPostBackControl()
and pass in the button in question.
This is the best solution for controls
that are added dynamically, such as
those inside a repeating template.

奶茶白久 2024-08-21 18:45:44

第一步是缩小问题范围。如果把UpdatePanel全部去掉的话,还能正常工作吗?

另外,我立即看到 pnlPhoto1Comments.Visible 设置为 false...?我想这是在某处正确设置的,否则您甚至不会获得 ItemCommand 事件。所以可能不是问题。

First step is to narrow down your problem. If you take out the UpdatePanel altogether, does it work OK?

Also, right off the bat I see that pnlPhoto1Comments.Visible is set to false... ? This is getting set correctly somewhere I suppose, otherwise you wouldn't even get the ItemCommand event. So probably not a problem.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文