使用下拉列表设置字段以选择值

本文关键字:选择 字段 设置 下拉列表 | 更新日期: 2023-09-27 17:57:05

我正在使用 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; } }
}

现在我想编写一个创建操作,其中 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>

下拉列表工作正常,列出了现有的作业类型。但是,创建作业时,不会设置作业的作业类型(未在创建的作业的作业行中设置作业类型 ID)。由于我是 asp.net mvc 的新手,我不确定表单传递给 post create 操作的内容:它是传递作业类型对象还是作业类型 id?为什么它没有为创建的作业设置作业类型 ID?我是否必须在创建后操作中设置自己的作业类型 ID?如果是这样,如何获取下拉列表的选定值?

使用下拉列表设置字段以选择值

编辑:

因此,要在下拉列表中获取所选值的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:如何获取下拉列表所选值

按照您现在设置视图的方式,只会发布所选作业类型的 ID。

可以将 Create 方法更新为仅接受int jobTypeList,然后根据提供的值创建添加作业。