1

シンプルなプロジェクト追跡 Web サイトを開発しています。「プロジェクト」には「タスク」があり、「タスク」には「サブタスク」があります。デフォルトの足場では、「タスク」を作成するときに、「タスク」の「ProjectId」フィールドを手動で選択する必要があります。「プロジェクトの詳細」ビュー内からのみ「タスク」を作成できるように設定したいと思います。新しいタスクを作成するときに「ProjectId」を手動で選択する必要がないようにするにはどうすればよいのでしょうか。スニペットは次のとおりです。

これは、Visual Studio によって自動生成されたタスクの 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、思ったほど難しくありません。SelectListobject selectedValue

これを置き換えます:

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

これで(この場合、選択したIDとして2を使用しました):

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

2つの可能性が頭に浮かびます。

コントローラ:

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 は、Id が x.ProjectId と一致する ViewBag.Projects からアイテムを事前に選択します。

もう 1 つの方法は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 に答える