jQuery Ajax从asp.net核心控制器的POST动作返回未定义的结果

时间:2018-05-10 18:40:23

标签: ajax asp.net-mvc asp.net-core asp.net-core-2.0

无法与我的AJAX和MVC 6控制器交朋友。

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

Index.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 操作,该操作定义如下:

HomeController.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对象正确填充: Debugger enters SetFormValues action correctly

最后,他是如何定义 SuccessFunction(结果)

再次

Index.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);
}

功能有效,警报提出但结果仍然未定义'不管我做什么: enter image description here

result = [object Object]
result.val = undefined

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

请帮帮我:)

2 个答案:

答案 0 :(得分:4)

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

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

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

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

供参考:MVC now serializes JSON with camel case names by default

答案 1 :(得分:1)

当我在启动文件中添加了这一行时,它运行得很好

public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CookiePolicyOptions>(options =>
        {
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });


        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        services.AddMvc().AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());
        services.AddDbContext<DataContext>(option => option.UseSqlServer(Configuration.GetConnectionString("DbCrudOperation")));

    }


function Edit(id) {
    $.ajax({
        type: 'GET',
        url: "/AjacCrud/EditPahe/" + id,
        dataType: 'JSON',
        contentType: "application/json",
        success: function (response) {

            $("#nameEmp").val(response.ID);
            console.log(response.ID);

        },
        error: function (GetError) {

            alert(GetError.responseText);

        }
    });

};