Asp.net C#MVC3 DropDownList-在表单post中找不到ID

Asp.net C#MVC3 DropDownList-在表单post中找不到ID,asp.net,asp.net-mvc-3,devexpress,Asp.net,Asp.net Mvc 3,Devexpress,我刚刚制作了一个包含DropDownList的表单,它完美地显示了选项名称,但没有将所选选项的ID发布到控制器中 以下是控制器的代码: [HttpGet] public ActionResult Insert(int id) { TemplateRepository repo = new TemplateRepository(); List<Template> templateList = repo.ListA

我刚刚制作了一个包含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");
        }
[HttpGet]
公共操作结果插入(int id)
{
TemplateRepository回购=新TemplateRepository();
List templateList=repo.ListAll().ToList();
ViewData[“Template”]=新的选择列表(templateList、“Id”、“Omschrijving”);
返回视图();
}
[HttpPost]
公共行动结果插入预测提交(Klant Klant)
{
KlantRepository回购=新KlantRepository();
klant.Naam=请求[“Naam”];
klant.Adres=请求[“Adres”];
klant.Postcode=请求[“Postcode”];
klant.Woonplaats=请求[“Woonplaats”];
klant.Email=请求[“电子邮件”];
klant.Telefoon=请求[“Telefoon”];
回购保存或更新(klant);
返回操作(“索引”);
}
以下是视图中的代码:

@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()
}
@使用(Html.BeginForm(“InsertOrEditSubmit”、“Klant”、FormMethod.Post))
{
@Html.DevExpress()标签(
设置=>
{
settings.ControlStyle.CssClass=“label”;
settings.Text=“Template”;
settings.AssociatedControlName=“模板”;
}
).GetHtml()
@Html.DropDownList(“模板”,ViewData[“模板”]作为SelectList); @Html.DevExpress()按钮( 设置=> { settings.ControlStyle.CssClass=“按钮”; settings.Name=“插入”; settings.Text=“Toevoegen”; settings.UseSubmitBehavior=true; } ).GetHtml() @Html.DevExpress()按钮( 设置=> { settings.ControlStyle.CssClass=“按钮”; 设置。Name=“取消”; settings.Text=“Terug”; settings.ClientSideEvents.Click=“函数(s,e){document.location=”+DevExpressHelper.GetUrl(新的{Controller=“Gebruiker”,Action=“Index”})+“;}”; } ).GetHtml() }
希望有人能解释为什么它不发布ID…

试试:请求[“模板”]

尝试一个简单的测试:

(控制员)

(视图)

现在请求[“Test”]应该返回所选值的Id


但是如果视图是强类型的,在对象“Klant”的情况下,不需要用请求填充值,对象将自动填充,如果您的对象具有属性模板,则也将填充该对象。

我发现,有时将输入的
名称与
id一起使用可以解决此问题


您为模板控件呈现的html是什么样子的?

如果我尝试请求[“模板”];它给了我一个错误:无法将类型“string”隐式转换为“DomainClasses.Domain.Template”。在控制器中,我用quickview检查了发布的数据,“Template”处的值定义为null。当我用quickwatch检查“repo.ListAll().ToList()”时,您确定您的“templateList”具有名为“Id”的字段吗,它给了我4条记录,这4条记录是base、naam和omschrijving,其中base是定义的id。所以我想它应该找到正确的id?这就是他放在templateList列表中的内容。
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)