我正在尝试在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:
编辑2:
我正在尝试使用表格'TABLE_ORGANIZATIONS'中的ID作为ID的下拉列表来显示视图,该表应添加到表'TABLE_CODES' - &gt; 'MANAGER'列为数字
答案 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。