2012-06-14 6 views
0

Я пытаюсь получить раскрывающийся список, чтобы отправить его выбор по HTTP POST вместе с другими связанными данными. Я могу видеть значение внутри коллекции форм, но мне VS2010 говорит, что объект имеет значение NULL, когда я смотрю на другие опубликованные объекты.Выпадающий список MVC3, возвращающий 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.

Редактировать: Я должен также упомянуть, что данные отправляются правильно, когда я удаляю связь между двумя классами.

ответ

2

Элемент формы называется «ProgramTypeTypeModels», что может привести к неправильной привязке назад. Вы также должны создать Model, чтобы вернуться к View.

Затем включают SelectList как свойство в Model для View

Теперь вы сделать что-то вроде:

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

А для [HttpPost], то вы можете взять сильно набраны Model в качестве аргумента и привязка aspnet будет выполнять всю работу, без причины для DTO из FormCollection

Смежные вопросы