Html.Dropdownlist选择的值不会从视图中回发到Controller

时间:2013-06-07 14:46:39

标签: asp.net asp.net-mvc asp.net-mvc-3 razor html-select

我正在尝试在Create.chtml上有一个下拉列表,用户可以从下拉列表中选择一个'NAME',相应的值(ID)应该发送回控制器以将其添加到数据库表中。

工作正常:我可以在Create.chtml视图页面上看到带有NAMES的下拉列表

什么不工作:从视图中的下拉列表中选择NAME时,其值(ID)不会传递给控制器​​

请参阅下面的代码,以确定我可能在哪里做错了。

Controller:

//
        // GET: /OrganizationCodes/Create

        public ActionResult Create()
        {

            var orgzList = (from x in db.TABLE_ORGANIZATIONS
                                                   select new TABLE_ORGANIZATIONSDTO
                                                   {
                                                       ID = x.ID,
                                                       NAME = x.NAME
                                                   }).OrderBy(w => w.NAME).ToList();

            ViewBag.orgz = new SelectList(orgzList, "ID", "NAME");

            return View();
        }

        public class TABLE_ORGANIZATIONSDTO
        {
            public string NAME { get; set; }
            public int ID { get; set; }
        }

        //
        // POST: /OrganizationCodes/Create

        [HttpPost]
        public ActionResult Create(TABLE_CODES dp)
        {
            try
            {
                using (var db = new IngestEntities())
                {


                    TABLE_CODES codes_temp = new TABLE_CODES();
                    ViewBag.orgz = codes_temp;

                    db.AddToTABLE_CODES(dp);
                    db.SaveChanges();
                }

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

===================================================================================
View: 'Create.chtml'

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)

    <fieldset>

         <div class="editor-field">
            @Html.DropDownList("orgz", (SelectList)ViewBag.orgz)
        </div>      

        <p>
            <input type="submit" value="Create" />
        </p>

   </fieldset>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

编辑1:

enter image description here

编辑2:

我正在尝试使用表格'TABLE_ORGANIZATIONS'中的ID作为ID的下拉列表来显示视图,该表应添加到表'TABLE_CODES' - &gt; 'MANAGER'列为数字

1 个答案:

答案 0 :(得分:3)

在您的操作Create[HttpPost]版本中,您期望在哪个变量中看到所选名称的值?

您已将<select>元素命名为id =“orgz”,但您的动作方法没有名为“orgz”的参数。

修改

当你这样做时:

@Html.DropDownList("orgz", (SelectList)ViewBag.orgz)

你最终会得到像这样的HTML:

<select id="orgz" name="orgz">...</select>

当表单回发到控制器操作时,它将尝试找到一个名为“orgz”的变量,它将把<select>元素中的选定项放入。你错过了这个。

尝试更改[HttpPost]版本的Create以包含“orgz”变量:

public ActionResult Create(TABLE_CODES dp, int orgz)
{
  // orgz will contain the ID of the selected item
}

然后您的变量“orgz”将包含下拉列表中所选项目的ID。