【问题标题】:Updatepanel with gridview inside doesn't fire events内部带有gridview的Updatepanel不会触发事件
【发布时间】:2013-01-03 16:21:45
【问题描述】:

我在更新面板中有一个带有网格视图的用户控件。

我尝试触发所有网格事件,因为当我在处理网格视图时,母版页不应该发布支持,但它不起作用。母版页总是后退!

我能做什么?

这是我的用户控制asp.net代码:

<asp:UpdatePanel ID="upFeatureCustomer" runat="server" ChildrenAsTriggers="true" >
<ContentTemplate>
<asp:GridView ID="gvFeatureCustomer" runat="server" DataKeyNames="Id"  
        AutoGenerateColumns="False" ClientIDRowSuffix="Id" 
    OnRowDataBound="dtgdResult_RowDataBound" ClientIDMode="Static" 
        ShowHeader="false">
    <Columns>
        <asp:TemplateField HeaderText="Nome" FooterText="Nome" SortExpression="Name">
            <ItemTemplate>
                <asp:DropDownList ID="ddlName" ClientIDMode="Predictable" runat="server" DataValueField="id" DataTextField="Name">
                </asp:DropDownList>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Valore" FooterText="Valore" SortExpression="Value">
            <ItemTemplate>
                <asp:TextBox id="txtValue" AutoPostBack="true" runat="server" CssClass="auto-feature" OnTextChanged="txtValue_TextChanged"></asp:TextBox>
            </ItemTemplate>
        </asp:TemplateField>
         <asp:TemplateField HeaderText="Delete" FooterText="Delete" Visible="true" HeaderStyle-Width="25"
                ItemStyle-HorizontalAlign="Center">
                <ItemTemplate>
                    <asp:HyperLink ID="Delete" runat="server" NavigateUrl='<%# DataBinder.Eval(Container, "DataItem.Id", "javascript:openDeleteDialog(\"{0}\");")%>'
                        ImageUrl="~/images/delete2.png" ToolTip="Delete">
                    </asp:HyperLink>
                </ItemTemplate>
            </asp:TemplateField>
    </Columns>
</asp:GridView>

</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="gvFeatureCustomer" EventName="DataBinding" />
<asp:AsyncPostBackTrigger ControlID="gvFeatureCustomer" EventName="DataBound" />
<asp:AsyncPostBackTrigger ControlID="gvFeatureCustomer" EventName="Disposed" />
<asp:AsyncPostBackTrigger ControlID="gvFeatureCustomer" EventName="Init" />
<asp:AsyncPostBackTrigger ControlID="gvFeatureCustomer" EventName="Load" />
<asp:AsyncPostBackTrigger ControlID="gvFeatureCustomer" EventName="PageIndexChanged" />
<asp:AsyncPostBackTrigger ControlID="gvFeatureCustomer" EventName="PageIndexChanging" />
<asp:AsyncPostBackTrigger ControlID="gvFeatureCustomer" EventName="PreRender" />
<asp:AsyncPostBackTrigger ControlID="gvFeatureCustomer" EventName="RowCancelingEdit" />
<asp:AsyncPostBackTrigger ControlID="gvFeatureCustomer" EventName="RowCommand" />
<asp:AsyncPostBackTrigger ControlID="gvFeatureCustomer" EventName="RowCreated" />
<asp:AsyncPostBackTrigger ControlID="gvFeatureCustomer" EventName="RowDataBound" />
<asp:AsyncPostBackTrigger ControlID="gvFeatureCustomer" EventName="RowDeleted" />
<asp:AsyncPostBackTrigger ControlID="gvFeatureCustomer" EventName="RowDeleting" />
<asp:AsyncPostBackTrigger ControlID="gvFeatureCustomer" EventName="RowEditing" />
<asp:AsyncPostBackTrigger ControlID="gvFeatureCustomer" EventName="RowUpdated" />
<asp:AsyncPostBackTrigger ControlID="gvFeatureCustomer" EventName="RowUpdating" />
<asp:AsyncPostBackTrigger ControlID="gvFeatureCustomer" EventName="SelectedIndexChanged" />
<asp:AsyncPostBackTrigger ControlID="gvFeatureCustomer" EventName="SelectedIndexChanging" />
<asp:AsyncPostBackTrigger ControlID="gvFeatureCustomer" EventName="Sorted" />
<asp:AsyncPostBackTrigger ControlID="gvFeatureCustomer" EventName="Sorting" />
<asp:AsyncPostBackTrigger ControlID="gvFeatureCustomer" EventName="Unload" />
</Triggers>

</asp:UpdatePanel> 

ScriptManager 位于母版页内。 谢谢。

【问题讨论】:

  • 回帖如何,什么时候做什么?
  • 尝试将 UpdatePanel 放在 ContentTemplate 中。
  • @rickschott 我在处理 gridview 时需要阻止页面回发。如果我尝试触发按钮单击事件(例如),它可以工作,但 gridview 事件不会。有什么想法吗?
  • @JBrooks 如果内容模板是更新面板部分,我如何将更新面板放在内容模板中?
  • 内容模板是更新面板的子模板。你不能接受 Jbrooks 的建议。我认为他把它误认为是 ContentPlaceHolder 元素,我刚刚意识到我也这样做了。我下面的回答可能不再相关:(

标签: c# asp.net c#-4.0 user-controls updatepanel


【解决方案1】:

我已经找到了解决方案。 我已经使用脚本管理器在页面上注册了 asyncpostbackcontrol 事件,它现在可以工作了!

代码是这样的:

ScriptManager.GetCurrent(Page).RegisterAsyncPostBackControl(tbValue);

谢谢你帮助我!

【讨论】:

    【解决方案2】:

    考虑内容页面的呈现方式。除了用于引用母版页的“页面”标签(可能还有程序集的注册标签等)之外,内容页面通常不应包含任何代码。您希望出现在内容选项卡之外的任何代码实际上都应该放在母版页中。

    如果您需要更多帮助,这是一个很好的教程:

    你可以这样想: 当您查看作为内容页面的 asp 网页时,母版页是实际页面。它将始终是显示的页面。当您在内容页面中放置 ContentPlaceHolder 时,它会忽略母版页上相应 ContentPlaceHolder 中的任何代码。同样,如果您将代码放在内容页面内但在 ContentPlaceHolder 之外,它也将被忽略。

    仅供参考:就像我说的,这只是我对它的抽象理解,所以如果我错了,请随时纠正我! :) 祝你的网站好运。

    【讨论】:

      【解决方案3】:

      在我的情况下,Gridview RowCommand 可以由 updatePanel 中的&lt;asp:Button&gt; 触发(我使用 Visual Studio 2012)

      【讨论】:

        猜你喜欢
        • 2018-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-01
        • 1970-01-01
        • 2014-04-26
        • 1970-01-01
        相关资源
        最近更新 更多