Передайте сериализованную форму в Action и привяжите к модели - PullRequest
2 голосов
/ 16 марта 2012

Я пытаюсь связать модель, полученную от вызова Ajax, но это не работает. Может быть, кто-то может мне помочь?

Я вызываю действие ValidateFile, используя Ajax

 $.ajax({
                    url: '@Url.Action("ValidateFile", "Converter")',
                    data: ({ file: fileName, formData: serializedForm }),
                    type: 'POST',
                    success: function (response) {
                        if (response.result) {
                        } else {
                            RemoveFile(fileName);
                        }
                    }
                });

Fiddler показывает такой запрос

file=!!!SP+Design!!!.txt&formData%5BEmail%5D=tomas%40mydomain.com

Я получаю данные в своем действии с заполненным параметром file, но свойство formData.Email всегда Null

[HttpPost]
public JsonResult ValidateFile(string file, UploadOptionModel formData)
{
}

Моя UploadOptionModel модель

namespace PC.Models
{
    public class UploadOptionModel
    {
        public string Email { get; set; }
    }
}

Форма, которую я пытаюсь сериализовать

@model PC.Models.UploadOptionModel
@using (Html.BeginForm())
{
    @Html.EditorFor(p => p.Email)
}

Функция сериализации JS

function serializeForm() {
    var data = $("form").serializeArray();
    var formData = {};
    for (var i = 0; i < data.length; i++) {
        formData[data[i].name] = data[i].value;
    }

    return formData;
}

1 Ответ

4 голосов
/ 16 марта 2012

Вам нужно JSON кодировать данные и установить тип контента JSON, чтобы связыватель модели работал с JSON. Итак, попробуйте это:

$.ajax({
    url: '@Url.Action("ValidateFile", "Converter")',
    data: JSON.stringify({ file: fileName, formData: serializedForm }),
    contentType: 'application/json',
    type: 'POST',
    success: function (response) {
        if (response.result) {
        } else {
            RemoveFile(fileName);
        }
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...