2013-12-20 40 views
2

我遇到了弹出窗口出现的问题。一旦我可以弹出显示,我可以从那里排除故障。基本上,我有一个gridview,我想要一个detailsview出现在弹出窗口中,当我选择一个链接。这一切都是使用objectdatasource完成的。Ajax ModalPopupExtender未触发

注意:如果我不尝试使用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> 

概括起来讲,当点击LinkBut​​ton的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设置为可见,然后单击该按钮,也不会发生任何事情。

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

+0

你不必使用JavaScript来打开modelpopup窗口? – rach

+0

我看过的例子没有javascript。我只是做错了什么。 – TimidObserver

+0

你有没有尝试从btnShowPopup中删除style = display:none?这就是你在最后一段中的意思吗? – jadarnel27

回答

0

我解决了我的问题。我想我会分享给任何有类似问题的人。

我在各种网站上看到了12个例子,表明这不是一个问题,但我在updatepanel之外使用了modalpopupextender,问题已解决。因此,至少对我来说,modalpopupextender必须在updatepanel之外才能触发。