MVC3下拉列表在模型对象中返回NULL

时间:2012-06-14 14:32:33

标签: c# asp.net-mvc-3 entity-framework razor

我正在尝试获取一个下拉列表,以便在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的其他数据一起保存。

编辑:当我删除两个类之间的关系时,我还应该提到数据正确提交。

1 个答案:

答案 0 :(得分:2)

表单元素被命名为“ProgramTypeTypeModels”,这会导致它无法正确绑定。您还应创建Model以返回View

然后在SelectList

Model中添加View作为属性

现在你做了类似的事情:

 @Html.DropDownListFor(model => model.SurveyProgramTypeModels)

对于[HttpPost],您可以将强类型Model作为参数,aspnet绑定将完成所有工作,没有理由将DTO从FormCollection