簡體   English   中英

將兩個查詢從控制器傳遞到視圖而不使用ViewBag

[英]passing two queries from controller to view without using ViewBag

我想在同一個View頁面中比較兩輛車的細節。 我不想使用ViewBag方法將我的數據發送到視圖,因為我從許多人那里聽說不是推薦的傳遞數據的方法。

我在這件事上找不到任何信息。 我試圖在一個查詢中發送兩輛車的詳細信息,但這將非常復雜,我沒有成功區分我的視圖中的第一輛車和第二輛車。

這是我的觀點的縮寫形式:

@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填充頁面加載時的下拉列表。 現在我試圖在兩個不同的列中展示兩個不同的汽車品牌,以便在細節上相互比較汽車。

我的問題:從同一個模型類中獲取兩個查詢並將其發送到視圖的最佳方法是什么?

謝謝。

從你的視圖我想你想顯示一個比較列表? 只需在表格中為一行創建一個類:

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>

我不確定,你想如何查詢你的汽車,所以我離開行動部分,直到你提供更多的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM