【发布时间】:2013-06-03 22:16:52
【问题描述】:
我试图在 Create.chtml 上有一个下拉列表,用户可以从下拉列表中选择一个“名称”,并且应将相应的值 (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,应将其添加到表“TABLE_CODES”->“MANAGER”列中作为数字
【问题讨论】:
-
在您指定
TABLE_CODES对象的外观之前,无法回答此问题。当您将数据 POST 到控制器时,框架将尝试将您的输入模型绑定到对象类型中。 -
@Matt Houser 已经回答了您的问题。更改 DropDownList 名称
@Html.DropDownList("dp", (SelectList)ViewBag.orgz)或操作参数名称ActionResult Create(TABLE_CODES orgz)。 -
ViewBag在这里帮不了你。ViewBag只是从控制器到视图的通用数据存储。在回发期间它什么都不做,并且是空的。 -
这是因为您的
<select>看起来像<select id="dp.MANAGER" name="dp.MANAGER">...</select>。 MVC 模型绑定会将其绑定到您的操作的dp参数的MANAGER属性。这样做是因为 名称匹配:dp.MANAGER->dp.MANAGER。 -
如果这是您希望变量在回发时继续的地方,那么是的,这就是您应该做的。
标签: asp.net asp.net-mvc asp.net-mvc-3 razor html-select