По какой-то причине, когда я отправляю эту модель представления обратно контроллеру и добавляю в модель для привязки, он заканчивается нулевым. Приложение, с которым я работаю, является массовым. Кроме того, я не написал большую часть кода, поэтому эта модель массивна, поэтому я просто добавлю те части, которые важны, но могут ли другие свойства препятствовать привязке модели?MVC3 привязка модели POST не работает для конкретной сложной модели
Я действительно знаю, что он работал, но в последний раз это не началось. Может быть, это даже не что-то с моделью, просто понравится какая-то помощь, отлаживающая ее.
POST Действие:
[HttpPost]
public ActionResult Categories(int applicationId, SqsApplicationViewModel model)
{
// Save away the ids they chose
_sqsApplicationCategoryService.SaveCategories(applicationId, model.Display_Categories.Where(i => i.Selected).Select(i => i.CategoryId).ToList());
// Complete the step
_sqsApplicationStepService.CompleteStep(applicationId, SqsStep.Categories);
return RedirectToAction("Documents");
}
вид Модель:
public class SqsApplicationViewModel : IMappable
{
public int Id { get; set; }
public int SupplierId { get; set; }
public int? SqsApprovalLevelId { get; set; }
// Other properties .....
public List<SqsChosenCategoryViewModel> Display_Categories { get; set; }
// Other properties .....
}
public class SqsChosenCategoryViewModel
{
public int CategoryId { get; set; }
public string Name { get; set; }
public string CategoryAmountString { get; set; }
public bool Selected { get; set; }
public IList<SqsDocumentComplianceViewModel> Documents { get; set; }
}
Вид:
@using (Html.BeginForm())
{
@Html.HiddenFor(m => m.Id)
@if (Model.Display_Categories != null && Model.Display_Categories.Count() > 0)
{
for (var i = 0; i < Model.Display_Categories.Count; i++)
{
@Html.HiddenFor(m => m.Display_Categories[i].CategoryId)
@Html.CheckBoxFor(m => m.Display_Categories[i].Selected)
@Model.Display_Categories[i].Name
}
}
}
Кроме того, значения отправляются обратно в поджигатель являются:
Id:1061
Display_Categories[0].CategoryId:4
Display_Categories[0].Selected:true
Display_Categories[0].Selected:false
Display_Categories[1].CategoryId:1
Display_Categories[1].Selected:false
Display_Categories[2].CategoryId:2
Display_Categories[2].Selected:false
Display_Categories[3].CategoryId:3
Display_Categories[3].Selected:false
Display_Categories[4].CategoryId:6
Display_Categories[4].Selected:true
Display_Categories[4].Selected:false
Display_Categories[5].CategoryId:8
Display_Categories[5].Selected:false
Display_Categories[6].CategoryId:10
Display_Categories[6].Selected:false
Display_Categories[7].CategoryId:7
Display_Categories[7].Selected:false
Display_Categories[8].CategoryId:9
Display_Categories[8].Selected:false
Display_Categories[9].CategoryId:11
Display_Categories[9].Selected:false
Display_Categories[10].CategoryId:5
Display_Categories[10].Selected:true
Display_Categories[10].Selected:false
------------- EDIT ----------------
Я попытался использовать следующие тестовые модели, и она работала. Возможно ли, что другое свойство в Модели может препятствовать связыванию? Я добавил некоторые случайные в них тоже, и он все еще работал.
public class TestViewModel
{
public int Id { get; set; }
public IList<TestSubViewModel> Display_Categories { get; set; }
public string TestProp { get { return "asdfasdfasdf"; } }
public TestSubViewModel TestGetFirst { get { return this.Display_Categories.FirstOrDefault(); } }
}
public class TestSubViewModel
{
public int CategoryId { get; set; }
public string Name { get; set; }
public string CategoryAmountString { get; set; }
public bool Selected { get; set; }
public IList<SqsDocumentComplianceViewModel> Documents { get; set; }
}
Вы должны показать свое мнение - если его не является обязательным, самая распространенная причина в том, что представление неверно –
Спасибо @StephenMuecke Я обновил вопрос с ним, а также с данными формы, отправленными в средствах отладки – Adam
Почему у вас есть параметр 'applicationId' в действии POST? Кроме того, удалите код, который не имеет отношения к вопросу («SqsChosenCategoryViewModel» и действие GET Categories). – ataravati