0

データベースからオブジェクトのリストを取得し、このリストを返すコントローラーがあります。

public ActionResult Index()
{
    var list = db.MyObjects.Where(x => x.family == "Web").ToArray();
    list = list.Distinct(new MyObjectByProtocolComparer())
               .OrderBy(x => x.fileName)
               .ToArray();
    ViewBag.Files = list;
    return View();
}

インデックス.cshtml:

この戻りリストは に挿入されDropDownListます:

@using (Html.BeginForm())
{
    <div>
        @Html.DropDownList(
           "File", new SelectList(ViewBag.Files,
           "protocol_site", "protocol_site"),
           "Select webmail site",
           new { style = "vertical-align:middle;" }
           )
        <button type="submit">Select</button>
    </div>
}

項目を 1 つ選択してボタンを押した後、もう 1 つのコントローラー メソッドは、DropDownList項目名を取得して新しいデータベース クエリを作成することです。

[HttpPost]
public ActionResult Index(string File)
{
    var list = db.MyObjects.Where(x => x.protocol == File).ToArray();
    ViewBag.Files = list;
    return View();
}

今何が起こっているかというと、新しいクエリが再び my に挿入されていますがDropDownList、このリストを別のページに送信し、このページからこれを表示したいのですListView。どうやってやるの ?

4

1 に答える 1

1

別のビューに送信したい場合は、フォームを再度表示するのではなく、新しいアクションにリダイレクトすることをお勧めします!

[HttpPost]
public ActionResult Index(string File)
{
    // Some validation logic
    return RedirectToAction("ShowList", new { protocol = File });
}

public ActionResult ShowList(string protocol)
{
    var list = db.MyObjects.Where(x => x.protocol == protocol).ToArray();
    ViewBag.Files = list;
    return View();
}

呼び出されたビューShowListは、定義したものである場合、項目を listView として表示します。

編集 :

ViewBag.Filesリストを同じビューに表示するには、ドロップダウン リストで既に使用されているため、リストに別の名前を付ける必要があります。

また、ドロップダウン リストでの現在の選択に基づいてリストを更新する場合は、 を使用することをお勧めしますAjax helpers。これについての良いリンクは次のとおりです

基本的に、ビュー (index.cshtml) は Ajax フォームを使用し、divリストを含む空を準備する必要があります。フォームによって呼び出されるアクションは、ビュー全体を更新せずに、その div に挿入された部分ビューを返します。

于 2013-11-12T11:48:20.393 に答える