2012-04-18 31 views
0

DropDownListを含むフォームを作成しましたが、これはオプション名を完全に表示しますが、選択したオプションのIDをコントローラにポストしません。ここでC#MVC3 DropDownList - フォームポストにIDが見つかりません

は、コントローラのコードです:

[HttpGet] 
    public ActionResult Insert(int id) 
    { 

      TemplateRepository repo = new TemplateRepository(); 
      List<Template> templateList = repo.ListAll().ToList<Template>(); 

      ViewData["Template"] = new SelectList(templateList, "Id", "Omschrijving"); 
      return View(); 
     } 

     [HttpPost] 
     public ActionResult InsertOrEditSubmit(Klant klant) 
     { 
      KlantRepository repo = new KlantRepository(); 
      klant.Naam = Request["Naam"]; 
      klant.Adres = Request["Adres"]; 
      klant.Postcode = Request["Postcode"]; 
      klant.Woonplaats = Request["Woonplaats"]; 
      klant.Email = Request["Email"]; 
      klant.Telefoon = Request["Telefoon"]; 

      repo.SaveOrUpdate(klant); 

      return RedirectToAction("Index"); 
     } 

そして、ここでは、ビュー内のコードです:

@using (Html.BeginForm("InsertOrEditSubmit", "Klant", FormMethod.Post)) 
{ 

@Html.DevExpress().Label(
    settings => 
    { 
     settings.ControlStyle.CssClass = "label"; 
     settings.Text = "Template"; 
     settings.AssociatedControlName = "Template"; 
    } 
).GetHtml() <br /> 
@Html.DropDownList("Template", ViewData["Template"] as SelectList); 

@Html.DevExpress().Button(
    settings => 
    { 
     settings.ControlStyle.CssClass = "button"; 
     settings.Name = "Insert"; 
     settings.Text = "Toevoegen"; 
     settings.UseSubmitBehavior = true; 
    } 
).GetHtml() 
@Html.DevExpress().Button(
    settings => 
    { 
     settings.ControlStyle.CssClass = "button"; 
     settings.Name = "Cancel"; 
     settings.Text = "Terug"; 
     settings.ClientSideEvents.Click = "function(s, e){ document.location='" + DevExpressHelper.GetUrl(new { Controller = "Gebruiker", Action = "Index" }) + "'; }"; 
    } 
).GetHtml() 
} 

それはIDを投稿していない理由を誰かが説明することを願って...

答えて

0

試行:リクエスト["Template"];

は、簡単なテストをしてみてください。

(コントローラ)

ViewData["Test"] = new SelectList(new[] {new {Id = 1, Text = "Test 1"}, new {Id = 2, Text = "Test 2"}, new {Id = 3, Text = "Test 3"}}, "Id", "Text"); 

(ビュー)

@Html.DropDownList("Test", ViewData["Test"] as SelectList) 

今すぐリクエスト[ "テスト"]は、選択した値のIDを返す必要があります。

あなたのViewが厳密に型付けされている場合、オブジェクト "Klant"の場合は、Requestに値を入力する必要はありません。オブジェクトは自動的に読み込まれ、オブジェクトにはプロパティがありますテンプレートも入力されます。

+0

リクエスト["Template"]を試してみてください。それは私にエラーを与えます:暗黙的にタイプ 'string'を 'DomainClasses.Domain.Template'に変換できません。 – Smoothal

+0

コントローラでは、クイックビューで投稿されたデータをチェックしました。「テンプレート」の値はnullとして定義されています。 – Smoothal

+0

"templateList"に "Id"というフィールドがありますか? – artisonus

0

nameと入力時にidを入力すると、この問題が解決することがあります。

テンプレートのレンダリングhtmlはどのように見えますか?

+0

私は当時これを発見し、それが働いた、おかげでとにかく! ; p – Smoothal

関連する問題