0

ドロップダウンリストを取得して、HTTPPOSTでの選択を他の関連データと一緒に返送しようとしています。フォームコレクション内の値を確認できますが、VS2010では、他の投稿されたエンティティを見ると、オブジェクトがNULLであると表示されます。

このモデルには、多対1の関係があります。

[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つのクラス間の関係を削除すると、データが正しく送信されることにも言及する必要があります。

4

1 に答える 1

2

フォーム要素の名前は「ProgramTypeTypeModels」であるため、正しくバインドされません。Modelまた、に戻るにはを作成する必要がありますView

次に、SelectListのプロパティとしてをModel含めるView

今、あなたは次のようなことをします:

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

そして、[HttpPost]あなたは強く型付けModelされた引数を取ることができ、aspnetバインディングがすべての作業を行います。DTOを外す理由はありません。FormCollection

于 2012-06-14T14:36:55.867 に答える