【问题标题】:Call server method without refresh page在不刷新页面的情况下调用服务器方法
【发布时间】:2015-12-12 13:09:55
【问题描述】:

我正在阅读很多关于此的文章和帖子,但我无法解决我的问题。

我在 aspx.cs 页面中有一些方法。方法不返回任何内容,它只是更改标签、文本框等中的值...

[System.Web.Services.WebMethod]
public void MethodName()
{
   //some code
}

在前端我有应该调用此方法的单选按钮。当我调用重新加载页面的常规服务器端方法(rdbMethodName_CheckedChanged)时,它会起作用。现在我想在不重新加载的情况下调用这个方法。我试过使用 Ajax

<asp:RadioButton ID="rbTwoSub" runat="server" GroupName="Subscription" value="2" AutoPostBack="false" OnCheckedChanged="rdbMethodName_CheckedChanged" />

要调用 ajax 方法,我将 AutoPostBack 设置为 false 并创建 js 来调用它

$("#ctl00_PageContent_rbTwoSub").change(function () {
            $.ajax({
                type: "GET",
                contentType: "application/json; charset=utf-8",
                url: "buy_sql_tools_new.aspx/MethodName?Product=ProductName",
                success: function (data) {
                    console.log('Success: ', data);
                },
                error: function (data) {
                    console.log('Error: ', error);
                }
            });
        });

此代码在没有参数且不调用此方法的页面的控制台控制台 html 代码中返回。

我只需要调用将更改所有值的后端方法就可以了。有谁知道如何做到这一点。

我想到的只有一件事,那就是将所有 C# 代码重写为 javascript 代码并在点击时仅调用 js 方法

-------- 2015 年 12 月 16 日编辑

您好,我尝试调用简单的 ajax 帖子,它会返回单个值,但它也不起作用

下面是代码

            $.ajax({
                type: "POST",
                url: "buy_sql_tools_new.aspx/HelloWorld",
                data: "{}",
                contentType: "application/json",
                dataType: "json",
                success: function (msg) {
                    alert(msg);
                },
                error: function (msg) {
                    console.log('error' + msg);
                }
            });

aspx.cs

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static string HelloWorld()
{
    return "Hello";
}

【问题讨论】:

  • 您将不得不像 AJAX 调用服务器一样获取新值,然后使用客户端模板引擎(例如把手,或其他类似 Tao author)在浏览器不刷新页面
  • 标记中仍有OnCheckedChanged - 您需要向控件添加点击事件侦听器,因为 RadioButton 没有 OnClientClick 属性
  • @NikosM。 tnx,我明天要试试这个。
  • @JaromandaX 点击事件没有问题,它可以工作。 ajax 和传递值/更改存在问题
  • 抱歉,我重新阅读了代码,我发现它在您已绑定到控件的更改事件中 - 但是,OnCheckedChanged 事件仍在触发 - 您是否尝试删除它?

标签: javascript jquery asp.net ajax webforms


【解决方案1】:

您的网络方法应该是静态的。此外,如果您想在 ajax 调用成功后实际更改某些内容,则必须返回您将要更新的数据。

尝试做这样的事情。请注意,该示例使用JSON.NET 进行序列化。

jQuery 代码:

    $(document).ready(function () { 

        $("input:radio[name='Subscription']").click(function () {

            var selectedRadio = $("input:radio[name='Subscription']:checked").val();

            //Code to fetch complex datatype
            $.ajax({
                type: "POST",
                url: "buy_sql_tools_new.aspx/GetProduct?product=ProductName",
                dataType: "json",
                data: "{ id :'" + selectedRadio + "'}",
                contentType: "application/json; charset=utf-8",
                success: function (data) {
                  //perform the desired operations here eg. change labels and etc by getting the values from data object.
                },
                error: function () {
                    console.log('error');
                }
            });

        });            
    });
</script>

代码隐藏中的WebMethod:

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public static string GetProduct(string product)
    {
        string result = string.Empty;
        try
        {
            //Get the product
            Product product = new Product();
            product.Name = "Sql tool";
            product.Price = 3.99M;
            result = JsonConvert.SerializeObject(product);
            //example output
            //{
            //  "Name": "Apple",
            //  "Price": 3.99,
            //}
        }
        catch (Exception ex)
        {
             result = ex.ToString();
            //Exception Handling Logic goes here
        }
        return result;
    }

希望对您有所帮助。

【讨论】:

  • Tnx 寻求答案。我一直使用 Ajax 和 Json,就像你在上面的考试中一样(在 MVC 中),但现在我使用 web.form,我不想管理 Json 帖子。我只是尝试在服务器端方法( someID.Text("sometext") )中设置值。我可以这样做还是应该将 Json 传回去然后更改值
  • 您无法从其代码隐藏中更改页面。这是因为该方法是静态的。因为它是静态的,所以该方法属于页面的每个实例。如果超过一个人打开该页面,该方法将不知道要更新哪个页面。所以您必须将信息发送回 ajax 调用。
  • @wazz Tnx 进行解释。
  • @Agop Dogramadzhiyan 我试过你的代码,但我得到了错误。我复制了你的方法和 ajax 调用,但没有成功。
  • @Agop Dogramadzhiyan 我只是调试应用程序,在错误响应中我得到了整个页面 html
猜你喜欢
  • 1970-01-01
  • 2017-05-11
  • 1970-01-01
  • 2014-07-20
  • 2020-08-20
  • 2018-08-31
  • 2017-03-24
  • 2018-08-16
  • 2011-10-31
相关资源
最近更新 更多