Отправка нескольких объектов с помощью jQuery на контроллер MVC 3 - PullRequest
1 голос
/ 14 июля 2011

У меня есть список флажков и раскрывающийся список. Я хочу передать выбранное значение из выпадающего списка и отмеченные флажки моему контроллеру MVC3 и использовать привязку модели.

ViewModel для флажка:

public class StateViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool Checked { get; set; }
    public IEnumerable<TransitionViewModel> Transitions { get; set; }
}

Шаблон редактора для StateViewModel /Views/Home/EditorTemplates/StateViewModel.cshtml:

@model Mcs.Sibs.UI.Web.Models.StateViewModel

@Html.HiddenFor(x => x.Id)
@Html.HiddenFor(x => x.Name)
<div>
    @Html.CheckBoxFor(x => x.Checked)
    @Html.LabelFor(x => x.Checked, Model.Name)
</div>

Мой взгляд:

@using (Html.BeginForm("GetSchedules", "Home", FormMethod.Post, new { id = "checkboxFrm" }))
{
    @Html.EditorForModel()
    <input id="ShowReportScheduleBtn" type="button" value="Show schedule" onclick="ShowReportSchedules()" />
}

Обработчик нажатия кнопки, который отправляет данные в контроллер:

function ShowReportSchedules() {
    var selectedGenerationId = $('#SelectedGenerationId').val();
    var statesData = JSON.stringify($('#checkboxFrm'));
    var statesData2 = $('#checkboxFrm').serialize(); //I also tried this

        $.ajax({
            type: 'POST',
            url: '/Home/GetSchedules',
            data: { "generationId": selectedGenerationId, "states": statesData },
            dataType: "json",
            contentType: 'application/json; charset=utf-8'
        });
};

Наконец, мой контроллер:

    [HttpPost]
    public ActionResult GetSchedules(int generationId, IEnumerable<StateViewModel> states)
    {
        return View("Index");

Я не могу передать значения своему контроллеру. Мне удалось передать только statesData объект без jQuery и использование type="submit" в моей форме. Когда я попытался передать только statesData с помощью jQuery и type="button", я получил ошибку «Недопустимый примитив JSON» в FireBug.

Когда я пытался передать объект целого + statesData, IE 9 падает, а Firefox зависает.

Я пробовал разные решения, но безуспешно.

Ответы [ 2 ]

2 голосов
/ 14 июля 2011

Попробуй так:

function ShowReportSchedules() {
    var selectedGenerationId = $('#SelectedGenerationId').val();
    $.ajax({
        type: 'POST',
        url: '@Url.Action("getschedules", "home")?generationId=' + selectedGenerationId,
        data: { states: $('#checkboxFrm').serialize() },
        success: function(result) {
            // Do something with the results
        }
    });
};
0 голосов
/ 09 февраля 2017
var a = $("#a").serialize();
var b = $("#b").serialize();
var c = $("#c").serialize();


$.ajax({
          url: '@Url.Content("~/Controller/Method1")',
          type: 'POST',
          data: a+b+c,
          success: function (success) {
            // do something
          }
        });

// in Controller
[HttpPost]
public ActionResult Method1(abc a, bcd b, xyz c)
{
}

// where abc, bcd xyz are class 
...