网格视图内的链接按钮导致在使用网格视图的更新面板时返回完整的帖子



更新面板外有一个按钮,按钮的点击事件绑定网格视图。

网格视图位于更新面板内,并且在网格视图内有一个链接按钮。

链接按钮导致了完整的帖子返回,我在网上看了看,尝试了不同的东西,但到目前为止没有运气。

<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<table>
<tr>
<td>
<asp:UpdatePanel ID="ContentUpdatePanel" runat="server">
<ContentTemplate>
<asp:GridView ID="gvMasterData" runat="server" AutoGenerateColumns="false" Width="200px" class="display">
<Columns>
<asp:TemplateField HeaderText="registration date" ItemStyle-Width="50">
<ItemTemplate>
<asp:Label ID="lblRegistrationDate" runat="server" Text='<%# Eval("registration_date") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="completed" ItemStyle-Width="50">
<ItemTemplate>
<asp:LinkButton Text='<%# Eval("completed") %>' ForeColor="Black" Font-Underline="false" runat="server" CommandName="Completed" CommandArgument="<%# Container.DataItemIndex %>" /> </ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="pending" ItemStyle-Width="50">
<ItemTemplate>
<asp:LinkButton ID="MarkAsCompleteButton" Text='<%# Eval("pending") %>' ForeColor="Black" Font-Underline="false" runat="server" CommandName="Pending" CommandArgument="<%# Container.DataItemIndex %>" /> </ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
</td>
</table>

代码隐藏

private void gvMasterData_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
LinkButton lb = e.Row.FindControl("MarkAsCompleteButton") as LinkButton;
ScriptManager.GetCurrent(this).RegisterAsyncPostBackControl(lb);
}
}

试着看看这个UpdatePanel 内GridView内的LinkButton触发的完全回发

当您使用更新面板时,标准网页生命周期确实会发生。这就是我们所说的部分回邮。

因此,表单加载事件和几乎所有标准web表单事件都将触发。

唯一的区别是,在这些部分post-back中,代码存根(代码隐藏(只能修改面板内部的控件,而不能修改外部的控件。面板中的代码当然可以抓取/使用/查看并使用面板外的控件,但值在某种程度上是"0";静态";或者更清楚的是,当自上一次完整页面回发以来呈现完整页面时,这些值将是相同的。

那么,你看到一篇帖子回来了,是困惑还是惊讶?你会的,你会的!!

所以,也许你看到了一个帖子(你会并且确实会(。然而,这篇文章并不是一篇完整的文章。在更新面板内部触发的任何按钮或事件都会导致回发,但这就是我们所说的部分回发。

因此,大多数网页标准事件都会触发,包括加载事件。如前所述,这里唯一的区别是,这些部分post-back只向服务器发送最新面板(而不是整个页面(内的更新内容。

所以你当然会在所有情况下看到像负载火灾这样的事件。当该面板内部的代码隐藏存根运行时,作为一种正常的操作过程,您只能使用代码隐藏来处理和修改面板内部的控件。如果该代码修改面板外部的控件;往返";此处发生的不包括更新面板之外的那些控件。因此,您不能也不会在运行的代码后面的面板之外的控件中看到反映的更改。

但是,当使用最新面板时,确实会出现一个好的老式往返,只是只有面板内的控件和东西才能进行这种经典的往返,而不是整个页面。

因此,更新面板确实会导致回发,但它们被视为部分回发。

当然,更新面板确实会导致回帖,但这只是部分回帖。所有经典的往返操作都发生在这里——与整页的帖子一样,但仅限于更新面板——而不是整页。

所以不清楚你是否";想知道";为什么你看到一个帖子回来(你会的,你确实会(。或者,如果你真的看到了一整页的帖子。因此,这里触发回帖(确实发生了(是零意外的。那么,唯一的问题是,你看到的帖子是一整页的(不应该出现(,还是你只看到了一个部分的页面帖子?

如前所述,您将看到在面板内部运行的事件的帖子。因此,像页面加载这样的正常操作在使用更新面板时会触发。

换句话说,更新面板代码和触发器的整个标准页面往返确实发生了。这是一次标准的经典往返旅行。如前所述,唯一的区别是,这种往返只包括面板内部的内容,因此页面上的其他控件不应被触摸或重新刷新。

最新更新