在ModalPopup显示器上调用C#方法

时间:2014-06-12 09:19:24

标签: c# javascript asp.net gridview modalpopupextender

我最近开始开发asp.net网络表单,我有这种情况,我自己无法解决这个问题。

我有一个链接按钮,当点击它时,我想打开一个模态弹出窗口。模态弹出窗口包含一个带有gridview的面板,我想在基于C#方法显示模态弹出窗口之前绑定(填充)。

基本上,我需要做的是,当用户点击按钮时,

(1)模态弹出窗口内的gridview被填充

(2)将显示模态弹出窗口,向用户显示完全填充的网格视图。

以下是代码段:

<%-- Relationship Type--%>
    <tr style="background-color:#eee;">      
        <td class="borderTd"> 
          <asp:LinkButton ID="lnkRelTypes" runat="server" Text="Relationship Type:" OnClick="btPopulateRelTypes_Click" > </asp:LinkButton>
       </td>  
    <td style=" border:0;">
            <asp:DropDownList ID="ddlRelationshipType" runat="server" TabIndex="3" CssClass="field"> </asp:DropDownList>
        </td>
    </tr>
    <ajaxToolkit:ModalPopupExtender ID="modalppSearchRelTypes" runat="server" TargetControlID="lnkRelTypes" 
                                        PopupControlID="panelMaintainRelTypes" BackgroundCssClass="modalBackground" OkControlID="OkButton"
                                        DropShadow="true" />

问题在于,当我调试它时,当我按下linkbutton时,事件永远不会被触发,并且它显示的模态弹出窗口当然没有任何内容,因为gridview从未填充过。

我已经尝试创建一个javascript函数,该函数将调用该方法(作为webmethod)为其分配OnClientClick事件的按钮,但通过这样做,在我的静态Web方法中我不能使用任何页面控件,例如我试图填充的网格视图。

LATER EDIT提供JS用于调用将填充gridview的WebMethod

<script type="text/javascript">
     function PopulateRelTypes() 
     {
         PageMethods.GetResult(OnSucess, OnError);

         function OnSucess(result)
         { }

         function OnError(result) {
             alert(result);
         }
     }

C#代码:

[WebMethod]
public static string GetResult()
{
    string result = GetRelTypes();
    return result;

}

错误消息:非静态字段,方法或属性需要对象引用“GetRelTypes()&#39;

这是在链接按钮的OnClientClick事件上分配的JS函数,但它不允许我使用任何页面控件(例如:gridview,labels等)


稍后编辑:)

我想我忘了提一些重要的东西,那就是来自modalpopup的linkbutton和gridview都在UpdatePanels里面。因此,单击链接按钮时,页面的回发永远不会被触发。


我使这个工作的唯一情况是在模态弹出窗口内创建第二个按钮,通过调用GetRelTypes()方法(更改为void而不是字符串)填充我的gridview,但是& #39;不是我想要的......

有什么建议吗?


我的解决方案:

对于主窗体中的链接按钮 - 我已经添加了一个OnClientClick事件来调用JS函数,如下所示:

的LinkBut​​ton:

<asp:LinkButton ID="lnkRelTypes" runat="server" Text="Relationship Type:" OnClientClick="PopulateRelTypes();" > </asp:LinkButton>

JS功能:

<script type="text/javascript">
     function PopulateRelTypes() 
     {
         document.getElementById('<%= btPopupLoad.ClientID %>').click();        
     }
</script>

javascript函数调用一个隐藏按钮,我将其放置在模态弹出窗口中。该隐藏按钮有一个服务器端clickevent,在我需要时填充gridview:

Modalpopup隐藏按钮:

<asp:Button ID="btPopupLoad" runat="server" Text="Load" 
                CssClass="button" onclick="btPopupLoad_Click" style="display:none;"/> 

获取数据的C#方法:

protected void btPopupLoad_Click(object sender, EventArgs e)
{
    GetRelTypes();
}

感谢上帝我终于找到了解决方案,这让我疯了! :)我希望有一天这个解决方案可以帮助别人(就像我一样)!

1 个答案:

答案 0 :(得分:0)

对于主窗体中的链接按钮 - 我添加了一个OnClientClick事件来调用JS函数,如下所示:

的LinkBut​​ton:

<asp:LinkButton ID="lnkRelTypes" runat="server" Text="Relationship Type:" OnClientClick="PopulateRelTypes();" > </asp:LinkButton>

JS功能:

<script type="text/javascript">
     function PopulateRelTypes() 
     {
         document.getElementById('<%= btPopupLoad.ClientID %>').click();        
     }
</script>

javascript函数调用我放在模态弹出窗口中的隐藏按钮。该隐藏按钮有一个服务器端clickevent,在我需要时填充gridview:

Modalpopup隐藏按钮:

<asp:Button ID="btPopupLoad" runat="server" Text="Load" 
                CssClass="button" onclick="btPopupLoad_Click" style="display:none;"/> 

获取数据的C#方法:

protected void btPopupLoad_Click(object sender, EventArgs e)
{
    GetRelTypes();
}