У меня есть список флажков и раскрывающийся список. Я хочу передать выбранное значение из выпадающего списка и отмеченные флажки моему контроллеру 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 зависает.
Я пробовал разные решения, но безуспешно.