Все работает, но мне нужно привязать много возможных "регов". Bind(Prefix = "Regs[0]",... вплоть до некоторого натурального числа n. Итак, как мне выполнить итерацию в этой ситуации, когда Bind(Prefix = "Regs[n]",... должен быть внутри того, что передается в индекс foreach?
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Index([Bind(Prefix = "Main", Include = "AlterationForseenChanges,AlterationGrowthDecline,DescriptionEcozone,DescriptionEcoregion,DescriptionEcodistrict,DescriptionPreviousDB")] SESData sESData
,[Bind(Prefix = "Regs[0]", Include = "RegulationName,RegulationDescription,RegulationURL")] SESRegulationsList sESRegulationList)
{
if (ModelState.IsValid)
{
db.SESData.Add(sESData);
db.SESRegulationList.Add(sESRegulationList);
db.SaveChanges();
return RedirectToAction("Report", new { id = sESData.id});
}
return View(sESData);
}
Это базовая модель просмотра
public class SESDataViewModel
{
public SESData Main { get; set; }
public List<SESRegulationsList> Regs { get; set; }
}
Просто в представлении есть неопределенное количество таких же редакторов.
@Html.EditorFor(m => m.Regs[0].RegulationDescription)
@Html.EditorFor(m => m.Regs[1].RegulationDescription)...
@Html.EditorFor(m => m.Regs[n].RegulationDescription)
И ваш метод POST просто должен быть public ActionResult Index(SESDataViewModel model), и он будет правильно привязан.
Спасибо, я не могу протестировать это до понедельника, но все равно ура!





Спасибо Mr. Muecke за это эффективное и простое решение.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Index(Models.SESDataViewModel sESData)
{
if (ModelState.IsValid)
{
db.SESData.Add(sESData.Main);
foreach (var reg in sESData.Regs){
db.SESRegulationList.Add(reg);
db.SaveChanges();
}
return RedirectToAction("Report", new { id = sESData.Main.id});
}
return View(sESData);
}
Начните с избавления от этих ужасных атрибутов
[Bind]. При правильном использовании модели представления вам никогда не понадобитсяBindAttribute, но модели представления не содержат моделей данных.