使用Dropdownlist设置字段以选择值

时间:2013-01-31 18:21:12

标签: c# asp.net-mvc web-applications razor

我正在使用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的选定值?

2 个答案:

答案 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,然后根据提供的值创建添加作业。