Я пытаюсь получить раскрывающийся список, чтобы отправить его выбор в 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.

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

0
user547794 14 Июн 2012 в 18:32

1 ответ

Лучший ответ

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

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

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

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

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

2
Gabe 14 Июн 2012 в 18:42