jquery - AJAX Post - 传递变量 - 我没有看到什么

标签 jquery ajax vb.net

我收到以下错误:

"Message":"No parameterless constructor defined for type of \u0027System.String\u0027.","StackTrace":"   at System.Web.Script.Serialization.ObjectConverter.ConvertDictionaryToObject(IDictionary`2 dictionary, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object& convertedObject)\r\n   at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object& convertedObject)\r\n   at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain(Object o, Type type, JavaScriptSerializer serializer, Boolean throwOnError, Object& convertedObject)\r\n   at System.Web.Script.Services.WebServiceMethodData.StrongTypeParameters(IDictionary`2 rawParams)\r\n   at System.Web.Script.Services.WebServiceMethodData.CallMethodFromRawParams(Object target, IDictionary`2 parameters)\r\n   at System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData, IDictionary`2 rawParams)\r\n   at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.MissingMethodException"}

我假设发生这种情况是因为我没有正确地从我的ajax帖子中传递一些东西,但我看不到它:(。如果我不传递任何参数,并且我从web方法中删除参数它有效。但是,对于他们来说,它不起作用。另外,如果我尝试传递 JSON 对象,它也不起作用。我在底部发布了该代码。如果有人可以帮助我,我将不胜感激!谢谢。

AJAX

$.ajax({
                    type: "POST",
                    url: 'Process.aspx/updateAProcess',
                    data: JSON.stringify({ 'ProcessID': ProcessID, 'ProcessDescription': ProcessDescription, 'ProcessName': ProcessName }),
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    async: false,
                    success: function (data) {
                        alert("Winner!");
                    }
                });

网页方法

<System.Web.Services.WebMethod()> _
<System.Web.Script.Services.ScriptMethod()> _
Public Shared Function updateAProcess(ByVal ProcessID As String, ByVal ProcessDescription As String, ByVal ProcessName As String)
    Dim pBSL As New ProcessBSL
    pBSL.ProcessUpdate(ProcessID, ProcessDescription, ProcessName)
    Return Nothing


End Function

使用 JSON

这是我的数据调用: 数据:JSON.stringify({ updateProcess: updateProcess }),

这是我创建 updateProcess 的位置:

                var updateProcess = new Object();
                updateProcess.ProcessName = $("#ProcessNameChange").val();
                updateProcess.ProcessDescription = $("#ProcessDescChange").val();
                updateProcess.ProcessID = $(this).closest("tr").children()[4];

它会导致此错误: {"Message":"无效的 Web 服务调用,缺少参数值:\u0027ProcessID\u0027。","StackTrace"

在后端,我有一个名为 ProcessBO 的对象,它有十几个属性,我的 webmethod 是:

    Public Shared Function update(ByVal updateProcess As ProcessBO)
    Dim pBSL As New ProcessBSL
    pBSL.ProcessUpdate(updateProcess.ProcessID, updateProcess.ProcessDescription, updateProcess.ProcessName)
    Return Nothing

最佳答案

出现该错误消息是因为 ASP.Net 尝试解码参数时发生异常。不知何故,其内部代码最终尝试反序列化异常。

问题的根源在于您将字符串参数作为直接文本传递,而不是将它们封装在引号中。例如,如果 ProcessID = "1"、ProcessDescription = "2"且 ProcessName = "3",您的参数将如下所示:

{ 'ProcessID': 1, 'ProcessDescription': 2, 'ProcessName': 3 }

但它们应该看起来像

{ 'ProcessID': '1', 'ProcessDescription': '2', 'ProcessName': '3' }

我发现实现这一点的最简单、最安全的方法是实际创建一个具有相应参数的 js 类,用数据填充它,并将此类传递给 stringify:

var params = new Object();
params.ProcessID = ProcessID;
params.ProcessDescription = ProcessDescription;
params.ProcessName = ProcessName;

$.ajax({
    type: "POST",
    url: 'Process.aspx/updateAProcess',
    data: JSON.stringify(params),
...

关于jquery - AJAX Post - 传递变量 - 我没有看到什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17886693/

相关文章:

javascript - 如何通过 jquery ajax 以及 MVC 模型传递 formData(fileupload)

javascript - 自动更改图像

javascript - $.getJSON 和 $.ajax 无法返回 JSON 对象

javascript - 如何使 Slick 同步 slider 响应灵敏?

javascript - 关闭 Firefox 的平滑滚动功能?

javascript - 为什么我的 Rails AJAX 请求会引发内部服务器错误?

.net - .NET 中的 AutoCAD -INSERT 命令

vb.net - SQLite不能正确存储小数

mysql - 从数据库初始化一维数组

jquery - Firefox 中奇怪的 Bootstrap 进度条行为