JQuery Ajax возвращает неопределенный результат от действия POST контроллера ядра asp.net - PullRequest
0 голосов
/ 10 мая 2018

Невозможно подружиться с моим контроллером AJAX и MVC 6.

Так я определяю вызов AJAX для SetFormValues ​​ POST-action:

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 должным образом или заполнить некоторые свойства в его объявлении выше, я не знаю. Я использую последние библиотеки для jquery, валидации и ненавязчивости. Я также попробовал JSON.parse (результат) , как это упоминалось в самой последней спецификации jQuery, но это также не сработало.

Пожалуйста, помогите мне:)

Ответы [ 2 ]

0 голосов
/ 01 января 2019

отлично работает, когда я добавил эту строку в файл запуска

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

        }
    });

};
0 голосов
/ 10 мая 2018

В ядре asp.net по умолчанию сериализатор использует camelCase имен свойств для сериализации json.Таким образом, ваш результат будет таким:

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

Javascript чувствителен к регистру .Поэтому используйте правильный регистр

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

Для справки: MVC теперь сериализует JSON с именами верблюдов по умолчанию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...