1

我正在开发一个简单的项目跟踪网站。“项目”有“任务”,“任务”有“子任务”。使用默认脚手架,在创建“任务”时,我必须手动选择“任务”的“ProjectId”字段。我想设置它,我只能从“项目详细信息”视图中创建一个“任务”。我想知道如何做到这一点,这样我就不必在创建新任务时手动选择“ProjectId”。以下是片段:

这是由 Visual Studio 自动生成的 Task 的 Create.cshtml 的一部分:

    <div class="editor-label">
        @Html.LabelFor(model => model.ProjectId, "Project Id")
    </div>
    <div class="editor-field">
        @Html.DropDownList("ProjectId", String.Empty)
        @Html.ValidationMessageFor(model => model.ProjectId)
    </div>

这会导致一个下拉框,我必须在其中手动选择项目 ID。

这是来自“任务”控制器的默认“创建”操作:

    public ActionResult Create()
    {
        ViewBag.ProjectId = new SelectList(db.Projects, "Id", "Id");
        ViewBag.StatusId = new SelectList(db.Status, "Id", "Name");
        ViewBag.TaskTypeId = new SelectList(db.TaskTypes, "Id", "Name");
        return View();
    }

我想要的是这样的:

    public ActionResult Create()
    {
        ViewBag.ProjectId = RouteData.Values["Id"];
        ViewBag.StatusId = new SelectList(db.Status, "Id", "Name");
        ViewBag.TaskTypeId = new SelectList(db.TaskTypes, "Id", "Name");
        return View();
    }

我必须在某个地方设置 myTask.ProjectId = ViewBag.ProjectId。但我不知道在哪里。这甚至是正确的做法吗?或者,还有更好的方法?

谢谢

4

3 回答 3

1

设置的默认值ProjectId并不像你想象的那么难SelectList,需要一个object selectedValue.

替换这个:

ViewBag.ProjectId = new SelectList(db.Projects, "Id", "Name");

有了这个(在这种情况下,我使用 2 作为选定的 ID):

ViewBag.ProjectId = new SelectList(db.Projects, "Id", "Name", 2);
于 2012-05-22T19:39:32.870 回答
1

你确定你需要DropDownList而不只是一个具有固定值的隐藏输入吗?

听起来您希望设置该值,甚至不应该看到它的视觉表示。如果是这种情况,您只需在模型中传递您的 ID,然后将其绑定到隐藏的输入。

于 2012-05-22T19:50:37.753 回答
0

我想到了两种可能性。

控制器:

public ActionResult Create()
{
    var task = new Task()  { ProjectId = your_predefined_value };
    ViewBag.Projects = new SelectList(db.Projects, "Id", "Id");
    ViewData.Model = task;
    return View();
}

看法:

@Html.DropDownListFor(x => x.ProjectId, (SelectList)ViewBag.Projects)

DropDownListFor 将从 ViewBag.Projects 中预先选择 Id 与 x.ProjectId 匹配的项目

另一种方法是Selected在特定项目上将 SelectListItem 的属性设置为 true。

控制器:

public ActionResult Create()
{
    ViewBag.Projects = new List<SelectListItem>() { 
        new SelectListItem() 
        {
            Value = "1",
            Text = "Project 1",
            Selected = true
        }
    };
    //...
}

看法:

@Html.DropDownList("ProjectId", (IEnumerable<SelectListItem>)ViewBag.Projects)
于 2012-05-22T19:47:09.270 回答