我正在使用asp.net mvc 4 web app c#。我有以下型号:
public class Job
{
public int id { get; set; }
public string description { get; set; }
public string company { get; set; }
public JobType jobType { get; set; }
//public int JobTypeId { get { return this.jobType.id; } }
}
现在我想编写一个create action,其中jobType属性是通过DropDownList设置的。创建动作:
//
// GET: /Job/Create
public ActionResult Create()
{
IEnumerable<JobType> jobtypes = db.JobTypes.ToList();
ViewData.Add("jobTypeList", new SelectList(jobtypes , "id", "name"));
return View();
}
//
// POST: /Job/Create
[HttpPost]
public ActionResult Create(Job job)
{
if (ModelState.IsValid)
{
db.Jobs.Add(job);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(job);
}
查看:
<div class="editor-label">
@Html.LabelFor(model => model.jobType)
</div>
<div class="editor-field">
@Html.DropDownList("jobTypeList")
@Html.ValidationMessageFor(model => model.jobType)
</div>
DropDownList可以很好地列出现有的工作类型。但是,创建作业时,未设置作业的作业类型(未在创建的作业的作业行中设置作业类型ID)。由于我是asp.net mvc的新手,我不确定表单传递给post create action的内容:它是否传递了jobtype对象或jobtype id?为什么不为创建的作业设置jobtype id?我是否必须在post create action中设置jobtype id my self?如果是这样,我如何获得DropDownList的选定值?
答案 0 :(得分:0)
编辑:
因此,要在下拉列表中获取所选值的ID,我只需要这样一行:
int contentId= APIFactory.getContentAPI().getID(department.SelectedValue);
其中函数getId()采用名称(下拉列表中的值),然后对所选部门的id进行数据库查询。这是我的getID()函数
public int getID(String deptName)
{
Dictionary<string, object> where = new Dictionary<string, object>();
where.Add(DEPTNAME, deptName);
DataTable dt = db.Query(ID, TABLE, where);
return (int)dt.Rows[0][ID];
}
注意:你不需要整个APIFactory的东西,你可以抛出查询而不是我的行,它也会工作。但是,如果你经常使用相同的查询,我会推荐它。
编辑: 由于您使用的是cshtml页面而不是aspx页面,请使用此处描述的方法获取值,然后使用我的方法获取id: How to get Dropdownlist selected value
答案 1 :(得分:0)
现在设置视图的方式,只会发布所选作业类型的ID。
您可以将Create方法更新为仅接收int jobTypeList
,然后根据提供的值创建添加作业。