将两个查询从控制器传递到视图而不使用ViewBag

时间:2012-11-26 05:10:32

标签: c# asp.net-mvc-3

我正在尝试在同一个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在页面加载时填充下拉列表。 现在我试图在两个不同的列中展示两个不同的汽车品牌,以便将汽车相互比较细节。

我的问题:从同一个模型类中获取两个查询并将其发送到视图的最佳方法是什么?

谢谢。

1 个答案:

答案 0 :(得分:2)

从你的视图我想你想要显示一个比较列表? 只需在表格中为一行创建一个类:

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>

我不确定,您想如何查询您的汽车,所以我将行动部分保留下来,直到您提供更多相关信息。