【问题标题】:Call Asp.net Method (which contains controls) with Jquery Post使用 Jquery Post 调用 Asp.net 方法(包含控件)
【发布时间】:2018-01-02 14:02:17
【问题描述】:

我有一个清除 asp:DropdownList 控件的 asp.net 方法。

[System.Web.Services.WebMethod]
public void clear()
{
    cloneSrcEnvList.Items.Clear();
}

我的目标是使用 JQuery/Ajax 请求调用此函数:

<script type="text/javascript">
    function BtnClick(){
        $.ajax({
            type: "POST",
            url: "Tools.aspx/clear",
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (msg) {
                console.log(msg);
            }
        });

    }
    </script>

但由于静态“500(内部服务器错误)”,我收到此错误。如果我将 clear 方法声明为 Static,则 DropDownlist 会导致错误

非静态字段、方法或属性需要对象引用

你有什么想法或建议吗?

【问题讨论】:

  • 静态web方法不知道页面上的服务器控件,所以使用静态web方法无法清除asp:DropDownList。
  • 可以用jquery调用非静态方法吗?
  • 不,不幸的是这是不可能的。您必须使用按钮单击事件处理程序调用非静态方法,如下所示:&lt;asp:Button ID="Button1" runat="server" OnClick="Button_Click"&gt;&lt;/asp:Button&gt;Button_Click 是后面代码中的方法。
  • 它将在页面上进行回发,我正在寻找一种无需回发即可调用方法(带按钮)的方法。

标签: c# jquery asp.net ajax asp.net-mvc


【解决方案1】:

ASP.NET 网页中的控件不能以这种方式更改和持久化。静态 Web 方法中的上下文对页面的执行一无所知。您可以将页面包装在&lt;asp:UpdatePanel&gt; 控件中并触发回发以清除它。页面会认为这是一个正常的回发,但用户只看到一个 AJAX 请求/响应...

不幸的是,这是 ASP.NET Web 表单和 AJAX 面临的挑战之一。

【讨论】:

  • 问题是我正在寻找一种方法来调用在 asp:Control 上进行更改的方法而无需回发。
  • 所有 DropDownList 控件都是&lt;select&gt; 元素,理论上您可以使用 JavaScript 清除列表。但是,据我所知,ASP.NET 会验证项目列表与以前的回发相同,这会导致错误,这很烦人。可能有解决方法,谷歌搜索可能会有所帮助。不记得有没有。由于 Web 表单的复杂性,UpdatePanel 通常是最简单的选项。 AJAX Web 服务在这里不是一个选项。
【解决方案2】:

要使用 AJAX 调用方法,我们需要使用 static 关键字声明一个函数。 每当您使用 static 关键字声明任何方法时,它都没有控件的定义,因此您无法在此方法中找到任何服务器控件引用。

请看下面的链接

https://www.aspsnippets.com/Articles/Calling-server-side-function-from-JavaScript-in-ASP.Net.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 2012-02-07
    • 2014-03-09
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多