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を投稿していない理由を誰かが説明することを願って...
リクエスト["Template"]を試してみてください。それは私にエラーを与えます:暗黙的にタイプ 'string'を 'DomainClasses.Domain.Template'に変換できません。 – Smoothal
コントローラでは、クイックビューで投稿されたデータをチェックしました。「テンプレート」の値はnullとして定義されています。 – Smoothal
"templateList"に "Id"というフィールドがありますか? – artisonus