Я пытаюсь получить раскрывающийся список, чтобы отправить его выбор в HTTP POST вместе с другими связанными данными. Я вижу значение внутри коллекции форм, но VS2010 сообщает мне, что объект имеет значение NULL, когда я смотрю на другие опубликованные объекты.
Эта модель имеет отношение многие к одному:
[Key]
public int ProgramTypeId { get; set; }
public string ProgramType { get; set; }
public List<SurveyProgramModels> SurveyProgramModel { get; set; }
Эта модель использует ProgramTypeId в качестве внешнего ключа.
public class SurveyProgramModels
{
[Key]
public Guid ProgramId { get; set; }
public virtual SurveyProgramTypeModels SurveyProgramTypeModels { get; set; }
public int ProgramYear { get; set; }
public int ProgramStatus { get; set; }
}
Контроллер GET / POST
//
// GET: /SurveyProgram/Create
public ActionResult Create()
{
SelectList typelist = new SelectList(db.SurveyProgramTypeModels.ToList(), "ProgramTypeId", "ProgramType", db.SurveyProgramTypeModels);
ViewData["SurveyProgramTypeModels"] = typelist;
return View();
}
//
// POST: /SurveyProgram/Create
[HttpPost]
public ActionResult Create(SurveyProgramModels surveyprogram, FormCollection collection)
{
SelectList typelist = new SelectList(db.SurveyProgramTypeModels.ToList(), "ProgramTypeId", "ProgramType", db.SurveyProgramTypeModels);
ViewData["SurveyProgramTypeModels"] = typelist;
// int SelectedCollection = Int32.Parse(collection["ProgramTypeId"]);
if (ModelState.IsValid)
{
surveyprogram.ProgramId = Guid.NewGuid();
db.SurveyPrograms.Add(surveyprogram);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(surveyprogram);
}
Выберите список в представлении:
<div class="editor-field">
@Html.DropDownList("ProgramTypeTypeModels", (IEnumerable<SelectListItem>)ViewData["SurveyProgramTypeModels"])
@Html.ValidationMessageFor(model => model.SurveyProgramTypeModels)
</div>
Список выбора является правильным при отображении в представлении, и я могу видеть выбранное значение как часть коллекции форм. Я не уверен, почему выбранное значение не сохраняется вместе с другими данными для SurveyProgramModels.
Изменить: я должен также упомянуть, что данные отправляются правильно, когда я удаляю связь между двумя классами.
1 ответ
Элемент формы называется «ProgramTypeTypeModels», что может привести к неправильной обратной привязке. Вы также должны создать Model
, чтобы вернуться к View
.
Затем включите SelectList
как свойство в Model
для View
Теперь вы делаете что-то вроде:
@Html.DropDownListFor(model => model.SurveyProgramTypeModels)
А для [HttpPost]
вы можете взять строго типизированный Model
в качестве аргумента, и привязка aspnet сделает всю работу, без каких-либо причин для DTO из FormCollection
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.