0

同じビュー ページで 2 台の車の詳細を比較しようとしています。ViewBag メソッドを使用してデータをビューに送信したくありません。多くの人から、データを渡す方法として推奨されていないと聞いたからです。

この件に関する情報は見つかりませんでした。両方の車の詳細を 1 つのクエリで送信しようとしましたが、非常に複雑になり、View で最初の車と 2 番目の車を区別することができませんでした。

これが私の見解の短縮形です:

@model IEnumerable<Cars.Models.Car>

@using (Html.BeginForm("Comparison", "Home", FormMethod.Post,
new { id = "ComparisonFormID" })) 
{
<table>

    <tr>
        <td>
            <p>First car:</p>
            @Html.DropDownList("carMake","All Makes")
        </td>
        <td>
            <p>Second car:</p>
            @Html.DropDownList("carMake2", "All Makes")

            <button type="submit" name="submit" value="search" id="CompareID">Compare</button>
        </td>
    </tr>
    @foreach (var item in Model)
    {
    <tr>
        <td>
            <label>Make:</label>
        </td>
        <td>
            <p>@Html.DisplayFor(modelItem => item.Make)</p>         @*First car's information*@
        </td>
        <td>
            <p>@Html.DisplayFor(modelItem => item.Make)</p>         @*Second car's information*@
        </td>
    </tr>
    }
</table>

}

私のモデルクラスの短縮版:

public class Car
{
    public int ID { get; set; }

    public String Make { get; set; }
}

そして最後に私のコントローラー:

public ActionResult Comparison(String carMake, String carMake2)
    {
        var makeLstBase = new List<String>();
        var makeQryBase = from m in db.Car
                          orderby m.Make
                          select m.Make;

        makeLstBase.AddRange(makeQryBase.Distinct());
        ViewBag.carMake = new SelectList(makeLstBase);
        ViewBag.carMake2 = new SelectList(makeLstBase);

        var cars = from m in db.Car
                   orderby m.Make
                   where m.Make == carMake || m.Make == carMake2
                   select m;

        return View(cars);
    }

ページの読み込み時にドロップダウンリストを埋めるために ViewBag を使用していることに注意してください。ここで、車を互いに詳細に比較するために、2 つの異なる車のブランドを 2 つの異なる列に表示しようとしています。

私の質問: 同じモデル クラスから 2 つのクエリを取得してビューに送信する最良の方法は何ですか?

ありがとうございました。

4

1 に答える 1

2

あなたのビューから、比較のリストを表示したいと思いますか? テーブルの 1 行にクラスを作成するだけです。

public class CarComparisonViewModel
{
    Car Car1 { get; set; }
    Car Car2 { get; set; }
}

ビューでは、これらの比較のリストを取得します。

@model IEnumerable<CarComparisonViewModel>
@foreach (var item in Model)
{
  <tr>
    <td>
        <label>Make:</label>
    </td>
    <td>
        <p>@Html.DisplayFor(m => item.Car1.Make)</p>
    </td>
    <td>
        <p>@Html.DisplayFor(m => item.Car2.Make)</p>
    </td>
</tr>

車にどのようにクエリを実行したいのかよくわかりません。そのため、詳細情報を提供していただくまで、アクションの部分は省略します。

于 2012-11-26T13:10:39.197 に答える