首页 > 解决方案 > jQuery Ajax 从 asp.net 核心控制器的 POST 操作返回未定义的结果

问题描述

无法从我的 AJAX 和 MVC 6 控制器中结交朋友。

这就是我为SetFormValues POST-action 定义 AJAX 调用的方式:

索引.cshtml

$.ajax({
    type: "Post",
    url: "Home/SetFormValues",
    data: { Name: name, Phone: phone },
    dataType: "json",
    success: function (result) {
        SuccessFunction(result)
    },
    error: function () {
        alert("ALARM!");
    },
    async: false
})

我看到控制器工作并执行SetFormValues操作,定义如下:

家庭控制器.cs

[HttpPost]
public JsonResult SetFormValues(string Name, string Phone)
{
    string NameErrorStr = string.IsNullOrWhiteSpace(Name) ? "Обязательное поле" : string.Empty;
    string PhoneErrorStr = string.IsNullOrWhiteSpace(Phone) ? "Обязательное поле" : string.Empty;

    var result = new { NameError = NameErrorStr, PhoneError = PhoneErrorStr };
    var jresult = Json(result);

    return jresult;
}

调试器显示操作执行并且我生成的 JSON 对象正确填充: 调试器正确输入 SetFormValues 动作

最后,他是如何定义SuccessFunction(result)的:

再次索引.cshtml

function SuccessFunction(result) {
    alert("Success function shit executed. result=" +
        result + "NameError=" +
        result.NameError + ". PhoneError=" +
        result.PhoneError);

    $("#nameerror").append(result.NameError);
    $("#phoneerror").append(result.PhoneError);
}

功能有效,警报被提出,但无论我做什么,结果都保持“未定义”: 在此处输入图像描述

result = [object Object]
result.val = undefined

也许我必须正确反序列化 JSON 结果或在上面的声明中填写一些属性,我不知道。我正在使用最新的 jquery 库,验证和不引人注目。我也尝试过JSON.parse(result),正如最新的 jQuery 规范中提到的那样,但效果不佳。

请帮我 :)

标签: ajaxasp.net-mvcasp.net-coreasp.net-core-2.0

解决方案


在 asp.net core 中,默认情况下,序列化程序使用camelCase属性名称进行 json 序列化。所以你的结果会是这样的

{"nameError":"some message","phoneError":"some message here"}

Javascript 区分大小写。所以使用正确的大小写

$("#nameerror").append(result.nameError);
$("#phoneerror").append(result.phoneError);

供参考:MVC 现在默认使用驼峰式名称序列化 JSON


推荐阅读