сериализация списка <SelectListItem>из представления в контроллер в MVC 3 - PullRequest
1 голос
/ 16 октября 2011

У меня проблемы с передачей объекта списка на мой контроллер - ajax post.

в представлении у меня есть это:

        try {
        var id = schedule.value;
        var data2 = @Html.Raw(Json.Encode(Model.SavedScheduleList));
        var url = '@Url.Action("SetActiveSchedule", "Frame")';
        $.post(url, { savedScheduleList: data2, signScheduleDataId: id }, function (data) { 
        });
    }
    catch (err) 
    {
        alert(err);
    }

Мой контроллер выглядит так:

    [HttpPost]
    public ActionResult SetActiveSchedule(List<SelectListItem> savedScheduleList, int signScheduleDataId)
    {
        try
        {               
            return Json(null);
        }
        catch (Exception ex)
        {
            throw;
        }
    }

Таким образом, когда мое Действие выполняется, мой savedScheduleList содержит объект списка с 7 объектами (это правильное количество элементов, через которые я отправляю. Однако каждый элемент кажется «пустым». Т. Е. Объекта SelectListItem класс, это значения свойств для каждого элемента: S elected = false, Text = null, Value = null.

Класс Model (который строго типизирован для этого представления):

    public class ScheduleModel
{

    private SignSchedule activeSignSchedule = new SignSchedule();
    private List<SelectListItem> savedSignScheduleList = new List<SelectListItem>();

    public int SignDataId { get; set; }
    public ScheduleFrameList ListFrames { get; set; }
    public DateTime Start { get; set; }
    public LogMessage LogMessage { get; set; }
    public bool CommsLogVisible { get; set; }
    public SignSchedule SignScheduleToMakeActive { get; set; }
    public int ActiveSignScheduleId { get; set; }
    //public List<SignSchedule> SavedSignScheduleList { get { return savedSignScheduleList; } }
    public List<SelectListItem> SavedScheduleList { get { return savedSignScheduleList; } }
}

Изучая data2 перед публикацией, показывает правильные данные в формате Json и исследуя свойство Request в Action. Я вижу правильные значения в свойстве Form.AllKeys, а также в свойстве Params, но, похоже, оно не корректно. разрешите его обратно к моему параметру объекта действия контроллера.

Возможно ли, что я пытаюсь сделать?

Спасибо

EDIT Вот строковое представление переменной data2:

var data2 = [{"Selected":false,"Text":"9","Value":"2589"},false,"Text":"afsdfs","Value":"2585"},false,"Text":"sdfas","Value":"2588"}....]

Я просто показываю 3 элемента здесь, но на самом деле их 7, как и ожидалось

1 Ответ

2 голосов
/ 16 октября 2011

Самый простой способ отправки сложных объектов и списков - использовать JSON-запрос, например:

var id = schedule.value;
var data2 = @Html.Raw(Json.Encode(Model.SavedScheduleList));
$.ajax({
    url: url,
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify({ savedScheduleList: data2, signScheduleDataId: id }),
    traditional: true,
    success: function(result) {
        // TODO: do something with the results
    }
});

Обратите внимание, что функция JSON.stringify изначально встроена в современные браузеры.Но если вам нужна поддержка устаревших браузеров, вы можете включить скрипт json2.js на свою страницу.

...