我在使弹出窗口完全显示时遇到问题。一旦我可以完全显示弹出窗口,便可以从那里进行故障排除。基本上,我有一个gridview,并且我希望在选择链接时在弹出窗口中显示detailsview。所有这些都是使用objectdatasource完成的。

注意:如果我不尝试使用modalpopupextender,则网格和detailsview效果很好。

我的问题是,是否有人可以告诉我我在代码中做错了什么,还是提供一种更好的解决方案来实现Ajax modalpopupextender。

〜这是我标记的简化版〜

<asp:Content ID="Content2" ContentPlaceHolderID="MasterContentPlaceHolder" Runat="Server">
<asp:ScriptManager ID="script1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="updatePanel" runat="server" UpdateMode="Conditional">
<ContentTemplate>
 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"
    DataSourceID="ObjectDataSource1" AllowSorting="True"
    CssClass="grid" CaptionAlign="Left" DataKeyNames="APP,ENV" OnSelectedIndexChanged="GridView1_SelectedIndexChanged"
    >
    <Columns>
        <asp:TemplateField ShowHeader="False" Visible = "false">
            <ItemTemplate>
                <asp:LinkButton ID="LinkButton1" runat="server"  CausesValidation="False"
                    CommandName="Select" Text="Select" Visible ="false"></asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="APP" SortExpression="APP">
            <EditItemTemplate>
                <asp:TextBox ID="TextBox1" runat="server" Visible = "false" Text='<%# Bind("APP") %>'></asp:TextBox>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:LinkButton ID="Label1" runat="server" CausesValidation ="false" CommandName="Select" Text='<%# Bind("APP") %>'></asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="ENV" HeaderText="ENV"
            SortExpression="ENV" />
    </Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
<asp:Panel ID="pnlPopup" runat="server" Width= "700px" style="display:none;">
<asp:UpdatePanel ID="detailspanel" runat="server" UpdateMode="Conditional">
<ContentTemplate>
    <asp:Button ID="btnShowPopup" runat="server" style="display:none" />
    <ajaxToolkit:ModalPopupExtender ID="mdlPopup" runat="server"
        TargetControlID="btnShowPopup" PopupControlID="pnlPopup"
        />
               <asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False"
    DataSourceID="ObjectDataSource2" CssClass="detail"
    >
    <Fields>
        <asp:BoundField DataField="APP" HeaderText="APP"
            SortExpression="APP" />
        <asp:BoundField DataField="ENV" HeaderText="ENV"
            SortExpression="ENV" />
        <asp:TemplateField ShowHeader="False">
            <EditItemTemplate>
                <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="True"
                    CommandName="Update" Text="Update"></asp:LinkButton>
                &nbsp;<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="False"
                    CommandName="Cancel" Text="Cancel"></asp:LinkButton>
            </EditItemTemplate>
            <ItemTemplate>
                <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False"
                    CommandName="Select" Text="Edit"></asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>
    </Fields>
</asp:DetailsView>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Panel>
<asp:ObjectDataSource ID="ObjectDataSource2" runat="server"
    SelectMethod="GetApplication"
    TypeName="Applications.BusinessServices.AppService"
     DataObjectTypeName="Applications.Entities.Application"
     UpdateMethod="Update">
    <SelectParameters>
        <asp:ControlParameter ControlID="GridView1" Name="APP"
            PropertyName="SelectedDataKey[0]" Type="String" DefaultValue="Null" />
        <asp:ControlParameter ControlID="GridView1" Name="ENV"
            PropertyName="SelectedDataKey[1]" Type="String" DefaultValue=" Null" />
    </SelectParameters>
</asp:ObjectDataSource>
    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
    SelectMethod="GetAllApplication"
    TypeName="Applications.BusinessServices.AppAvailService" SortParameterName="sortColumn">
</asp:ObjectDataSource>
</asp:Content>


总结起来,单击链接按钮label1时,应该会出现modalpopup并显示detailsview。

〜这是我的代码〜

protected void Page_Load(object sender, EventArgs e)
{
    if (GridView1.SelectedIndex == -1)
    {
        GridView1.EnablePersistedSelection = true;
    }
}
protected void  GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
    this.DetailsView1.Visible = true;
    this.DetailsView1.DataBind();
    this.detailspanel.Update();
    this.mdlPopup.Show();

}


}

我已通过调试确认,单击链接后,mdlPopup.Show()确实会执行,并且Visual Studio不会注册任何错误。只是什么都没有发生。

另外,Btnshowpopup只是一个假按钮。如果我调用mdlpopup.show(),则弹出窗口仍应显示。从代码背后。即使将面板和btnshowpopupp设置为可见,然后单击该按钮,仍然没有任何反应。

任何帮助,将不胜感激。谢谢。

最佳答案

我已经解决了我的问题。我认为我会与有类似问题的任何人分享它。

我已经在各个站点上看到了12个示例,这些示例表明这并不是问题,但是我将modalpopupextender放在了updatepanel之外,问题已得到解决。因此,至少对我而言,modalpopupextender必须位于updatepanel之外才能启动。

10-02 01:21