【问题标题】:How to I pass parameters from ajax to web method?如何将参数从 ajax 传递到 Web 方法?
【发布时间】:2016-05-13 20:48:50
【问题描述】:

我正在通过我的网络方法进行更新操作。我正在做的是我的 webForm1.aspx 页面中有两个文本框。我正在尝试将这些文本框值发布到 web 方法,以便我的更新操作将运行。以下是我的代码:

var uval1 = $("#up_tb1").val();
var uval2 = $("#up_tb2").val();
function upbtnclicked() {
        alert('clicked');
        $.ajax({
            type: "POST",
            url: "WebForm1.aspx/updateData",
            data: '{val1:"' + uval1 + '",val2:"' + uval2 + '"}',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: OnSuccess,
            error: OnErrorCall
        });

        function OnSuccess(response) {
            alert(response.d);
        }
        function OnErrorCall(response) { console.log(error); }
    }

我的更新程序运行良好,但是当我将调试点放在我的 web 方法上并检查参数值时,它包含未定义的值并且没有从文本框中获取正确的值。下面是我的代码隐藏代码。请在这里帮助我。

[WebMethod]
    public static bool updateData(string val1,string val2)
    {
        var db = new dbDataContext();
        var query = (from e in db.Employees
                     where e.ID == up_id
                     select e).FirstOrDefault();
        query.EMP_FNAME = val1;
        query.EMP_MNAME = val2;
        db.SubmitChanges();
        return true;    
    }

【问题讨论】:

  • 你的方法是错误的。这样做data: {val1: uval1 ,val2: uval2 },
  • 一般情况下,不要尝试手动构建 JSON;你可能会做错。在这种情况下,jQuery 将为您转换 data 的值。
  • 这能回答你的问题吗? Pass Multiple Parameters to jQuery ajax call

标签: c# asp.net ajax


【解决方案1】:
var uval1 = $("#up_tb1").val();
var uval2 = $("#up_tb2").val();
function upbtnclicked() {
    alert('clicked');
    $.ajax({
        type: "POST",
        url: "WebForm1.aspx/updateData",
        data: {val1: uval1 ,val2: uval2 },
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: OnSuccess,
        error: OnErrorCall
    });

    function OnSuccess(response) {
        alert(response.d);
    }
    function OnErrorCall(response) { console.log(error); }
}

您必须确保传递的参数必须与服务器端的 webmethod 参数匹配。

[WebMethod]
public static bool updateData(string val1,string val2)
{
    using (var db = new dbDataContext())
    {
        var query = (from e in db.Employees
                     where e.ID == up_id
                     select e).FirstOrDefault();
        query.EMP_FNAME = val1;
        query.EMP_MNAME = val2;
        db.SubmitChanges();
    }
    return true;    
}

【讨论】:

  • POST http://localhost:49396/WebForm1.aspx/updateData 500 (Internal Server Error)
  • 在 web 方法中放置一个调试器。检查 ajax 调用是否命中调试器。
  • 当我将您的 data: {val1: uval1 ,val2: uval2 }, 代码更改为 data: JSON.stringify({ arr: Values }), 内部 500 错误消失时,我检查了它
  • 但我从客户端得到未定义的值
【解决方案2】:

您需要从 ajax 中的data 参数发送一个数组。尝试类似:

var uval1 = $("#up_tb1").val();
var uval2 = $("#up_tb2").val();
function upbtnclicked() {
        alert('clicked');
        $.ajax({
            type: "POST",
            url: "WebForm1.aspx/updateData",
            data: {val1: uval1 ,val2: uval2 },
            contentType: "application/json; charset=utf-8",
            success: OnSuccess,
            error: OnErrorCall
        });

        function OnSuccess(response) {
            alert(response.d);
        }
        function OnErrorCall(response) { console.log(error); }
    }

【讨论】:

  • 你的意思是这样var Values = new Array(); Values[0] = $("#up_tb1").val(); Values[1] = $("#up_tb2").val();
  • 不,您发送的是一个字符串,使用{val1: uval1, val2:uval2} 将发送一个包含val1val2 的数组。在webmethod 中,您将收到映射所需参数的它们
  • 另外,你说你得到未定义的值,你能用文本框定义更新你的问题吗?
  • 我在帖子中完整描述了我的问题,您应该重新检查一下。
  • 请显示文本框的 html 定义(这就是我所要求的)。对不起,如果我没有更明确的话。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-09
  • 2012-01-23
  • 2010-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多