我正在尝试获取一个下拉列表,以便在HTTP POST上发送它的选择以及其他相关数据。我可以看到Form Collection中的值,但是当我查看其他发布的实体时,我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的其他数据一起保存。
编辑:当我删除两个类之间的关系时,我还应该提到数据正确提交。
答案 0 :(得分:2)
表单元素被命名为“ProgramTypeTypeModels”,这会导致它无法正确绑定。您还应创建Model
以返回View
。
然后在SelectList
Model
中添加View
作为属性
现在你做了类似的事情:
@Html.DropDownListFor(model => model.SurveyProgramTypeModels)
对于[HttpPost]
,您可以将强类型Model
作为参数,aspnet绑定将完成所有工作,没有理由将DTO从FormCollection