5

データベース内の 2 つの異なるモデルのデータをリスト形式で MVC4 プロジェクトのビューに送信する必要があります。

このようなもの:

コントローラー

public ActionResult Index()
{
    Entities db = new Entities();

    ViewData["Cats"] = db.Cats.toList();
    ViewData["Dogs"] = db.Dogs.toList();

    return View();
}

ビュー:

@* LIST ONE *@
<table>
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.ListOneColOne)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.ListOneColTwo)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.ListOneColThree)
        </th>
    </tr>

@foreach (var item in @ViewData["Cats"]) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.ListOneColOne)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ListOneColTwo)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ListOneColThree)
        </td>
    </tr>


@* LIST TWO *@
<table>
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.ListTwoColOne)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.ListTwoColTwo)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.ListTwoColThree)
        </th>
    </tr>

@foreach (var item in @ViewData["Dogs"]) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.ListTwoColOne)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ListTwoColTwo)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ListTwoColThree)
        </td>
    </tr>

ビューは、2 つのリスト (モデルごとに 1 つのリスト) を表示することです。

これを行う最も効率的な方法は何ですか?

ビューモデル?

ビューデータ/ビューバッグ?

他の何か?

(第三者の提案はご遠慮ください)

更新

List<T>さらに、 Viewmodel を提案する答えを実装するために 1 時間以上試みましたが、運がありませんでした。これは、Viewmodel が次のようになっているためだと思います。

public class GalleryViewModel
{
    public Cat cat { get; set; }
    public Dog dog { get; set; }
}
4

1 に答える 1

7

問題と目標を説明してください。そうすれば、(具体的に) 何をしようとしているのかがわかります。

これは、2 つのリストがあり、それらをビューに送信したいという意味だと思います。これを行う 1 つの方法は、2 つのリストをモデルに入れ、そのモデルをビューに送信することですが、既に 2 つのモデルがあると指定しているように見えるので、その仮定に従います。

コントローラ

public ActionResult Index()
{
    ModelA myModelA = new ModelA();
    ModelB myModelB = new ModelB();

    IndexViewModel viewModel = new IndexViewModel();

    viewModel.myModelA = myModelA;
    viewModel.myModelB = myModelB;

    return View(viewModel);
}

モデルを見る

public class IndexViewModel
{
    public ModelA myModelA { get; set; }
    public ModelB myModelB { get; set; }
}

モデル

public class ModelA
{
    public List<String> ListA { get; set; }
}

public class ModelB
{
    public List<String> ListB { get; set; }
}

意見

@model IndexViewModel

@foreach (String item in model.myModelA)
{
    @item.ToString()
}

(私のC#が錆びていたらごめんなさい)

于 2013-05-01T06:14:57.490 に答える