内置gridview的Updatepanel不会触发事件

时间:2013-01-03 16:21:45

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

我在updatepanel中有一个带有gridview的用户控件。

我试图触发所有网格事件,因为在我处理gridview时,母版页永远不应该发布支持,但它不起作用。母版页始终是后期支持的!

我能做什么?

这是myuser控件的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位于母版页内。 谢谢。

3 个答案:

答案 0 :(得分:1)

我找到了解决方案。 我已经使用scriptmanager在页面上注册了asyncpostbackcontrol事件,现在就可以了!

代码是这样的:

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

感谢您帮助我!

答案 1 :(得分:0)

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

如果你需要一些进一步的帮助,这是一个非常好的教程:

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

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

答案 2 :(得分:0)

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