【问题标题】:Calling C# Method on ModalPopup display在 ModalPopup 显示上调用 C# 方法
【发布时间】:2023-03-02 22:11:01
【问题描述】:

我最近开始开发 asp.net 网络表单,但我遇到了这种情况,我无法自己解决。

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

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

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

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

这里是代码sn-ps:

<%-- 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" />

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

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

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

<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()”需要对象引用

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


稍后编辑 :)

我想我忘了提到一些重要的事情,那就是 modalpopup 中的链接按钮和网格视图都在 UpdatePanels 中。因此,当单击链接按钮时,页面的回发永远不会被触发。


我使它起作用的唯一情况是在模态弹出窗口内创建第二个按钮,该按钮将通过调用 GetRelTypes() 方法(已更改为 void 而不是字符串)填充我的网格视图,但那是不是我想要的样子……

有什么建议吗?


我的解决方案:

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

链接按钮:

<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 函数调用了一个隐藏按钮,该按钮已放置在模式弹出窗口中。该隐藏按钮有一个服务器端点击事件,可以根据需要填充网格视图:

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();
}

感谢上帝,我终于找到了解决方案,这让我发疯了!!! :) 我只是希望这个解决方案有一天会帮助其他人(比如我)!

【问题讨论】:

  • 反对票是怎么回事?!?我说过我是新手。
  • 不知道为什么它被否决了。但是你也可以发布你的 JS 吗?
  • @AndrewPolland - 请查看我更新的帖子。

标签: c# javascript asp.net gridview modalpopupextender


【解决方案1】:

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

链接按钮:

<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 函数调用了一个隐藏按钮,该按钮已放置在模式弹出窗口中。该隐藏按钮有一个服务器端点击事件,可以根据需要填充网格视图:

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();
}

【讨论】:

    猜你喜欢
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多