如何使用ModalPopupExtender在嵌套面板中触发OnClick事件?

时间:2015-04-23 11:20:02

标签: javascript c# asp.net updatepanel modalpopupextender

我有以下情况:

UpdatePanel1 - > UpdatePanel2 - > UpdatePanel3

在其中我有一个GridView,其中包含以下列定义:

<ItemTemplate>
    <asp:ImageButton ID="img_btnEdit" runat="server" AlternateText="Edit" 
        CausesValidation="false" Height="15px" OnClientClick='<%#Eval("TranValueId", "PopulateEditTransValuesMDPP({0}); return false;") %>' 
        ImageUrl="~/Images/document_edit.png" Width="15px" />
</ItemTemplate> 

单击时,应打开ModalPopupExtender,但首先我需要检索所单击行的边界。

JS功能:

function PopulateEditTransValuesMDPP(id) {

    var btPopupLoad = document.getElementById('<%= btPopupLoad.ClientID %>');
    var hdnlblModalPopuphelper = document.getElementById('<%= hdnlblModalPopuphelper.ClientID %>');

    if (id != null) {
        hdnlblModalPopuphelper.innerHTML = id;
    }

    btPopupLoad.click();
}

以下是 HTML代码的其余部分,与UpdatePanel位于同一GridView

<asp:Label ID="hdnlblModalPopuphelper" runat="server" Text="" style="display:none;"></asp:Label> 
<asp:Button ID="btPopupLoad" runat="server" Text="Load" OnClick="btPopupLoad_Click" style="display:none;"  /> 
<ajaxToolkit:ModalPopupExtender ID="modppOpen" runat="server" TargetControlID="btPopupLoad" 
    PopupControlID="pnlModPPDefaultValueEditing"  BackgroundCssClass="modalBackground" OkControlID="btnCloseModalPopup"
    DropShadow="true" />
<asp:Panel ID="pnlModPPDefaultValueEditing" runat="server" CssClass="aspnetForm" Width="80%"> 
<asp:UpdatePanel ID="updpanEditDefaultValue" runat="server" UpdateMode="Conditional">
    <Triggers> 
        <asp:AsyncPostBackTrigger ControlID="btnSaveEditingTransValueDefaultValue" />
    </Triggers>
(...)

问题描述: 一切正常,但OnClick的{​​{1}}事件(服务器端事件)未被触发!

我让btPopupLoad事件被解雇的唯一方法是在其定义中设置OnClick,但这会导致回发UseSubmitBehaviour="false"消息。 所以基本上我希望触发ModalPopup并同时保持OnClick Event仍然打开。

请帮帮忙?

1 个答案:

答案 0 :(得分:0)

我自己想出来,所以如果有人碰到这个,这就是它对我有用的方式:

而不是

<ItemTemplate>
    <asp:ImageButton ID="img_btnEdit" runat="server" AlternateText="Edit" 
        CausesValidation="false" Height="15px" OnClientClick='<%#Eval("TranValueId", "PopulateEditTransValuesMDPP({0}); return false;") %>' 
        ImageUrl="~/Images/document_edit.png" Width="15px" />
</ItemTemplate> 

(无论如何使用hacky方式打开模态弹出窗口)只需这样做:

<强> HTML

<asp:ImageButton ID="img_btnEdit" runat="server" AlternateText="Edit" CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" CommandName="Editing"  
CausesValidation="false" Height="15px" 
ImageUrl="~/Images/document_edit.png" Width="15px" />

<强> C#:

protected void gvTransValues_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Editing")
    {
        int index = Convert.ToInt32(e.CommandArgument);
        GridViewRow row = gvTransValues.Rows[index];

        //do whatever you need here

        modppOpen.Show();
    }
}

我基本上做的是取代使用隐藏按钮或标签的整个hacky方式,只需使用CommandNameCommandArguments RowCommand点击按钮直接提示modalpopup } gridview的事件。