0

我正在尝试在同一视图页面中比较两辆汽车的详细信息。我不想使用 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 填充下拉列表。现在我试图在两个不同的列中展示两个不同的汽车品牌,以便详细比较汽车。

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

谢谢你。

4

1 回答 1

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>

我不确定你想如何查询你的汽车,所以我把动作部分放在一边,直到你提供更多信息。

于 2012-11-26T13:10:39.197 回答