代码之家  ›  专栏  ›  技术社区  ›  Anton Serov

jQuery Ajax从asp返回未定义的结果。net core控制器的后期操作

  •  0
  • Anton Serov  · 技术社区  · 6 年前

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

    这就是我定义AJAX调用的方式 SetFormValues 后期操作:

    指数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(结果) 定义如下:

    指数再次使用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、validate和Untrusive。 我也试过了 JSON。分析(结果) ,正如lattest jQuery规范中提到的那样,但它并没有起到很好的作用。

    请帮帮我:)

    2 回复  |  直到 6 年前
        1
  •  4
  •   Shyju    6 年前

    在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

        2
  •  1
  •   SHUBHASIS MAHATA    6 年前

    当我在启动文件中添加这一行时,它工作得非常好

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