1

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

现在我想编写一个创建操作,其中通过 DropDownList 设置 jobType 属性。创建动作:

//
    // 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 操作的内容:它传递的是 jobtype 对象还是 jobtype id?为什么它没有为创建的作业设置jobtype id?我是否必须在创建后操作中设置我自己的作业类型 ID?如果是这样,我如何获得 DropDownList 的选定值?

4

2 回答 2

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: 如何获取Dropdownlist选定值

于 2013-01-31T19:18:06.960 回答
0

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

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

于 2013-01-31T19:23:04.433 回答