0

这是我一直在努力解决很长时间无济于事的问题。

基本上我有两个模型:Units 和 Trades,我想要的是当我在 View for Units 上时,它会返回一个分页的单位列表。我想要的是表中的一个附加列,它返回 Trades 中每个 Unit 有多少条目 Trade.Name = model.Name 的计数。

我遇到的第一个问题是从一个视图访问两个模型。我已经尝试了很多基于搜索的东西,但似乎无法使任何工作。

第二个问题是如何实际进行计数。是否可以直接从视图中使用 Linq?到目前为止,它对我没有用。

在此先感谢或任何帮助!

单元视图的重要部分:

@model PagedList.IPagedList<FTv2.Models.Unit>

<table style="border-width: 1px; border-color:#000000; border-style: solid; border-top: 2px; border-top-color:#000000; border-top-style: solid;">
    <tr>
        <th></th>
        <th>Name</th>
        <th>Type</th>
        <th>Skill</th>
        <th>Rating</th>
    </tr>

@foreach (var item in Model) {

    <tr>
        <td>
            @{ ViewBag.ImgUrl = item.Name + ".png";}
            <a href="/Images/@ViewBag.ImgUrl" data-lightzap="" ><img src="/Images/@ViewBag.ImgUrl" HEIGHT="66" WIDTH="50" ></a>
        </td>
        <td>
            <a href="/ActiveTrades?Name=@item.Name">@Html.DisplayFor(modelItem => item.Name)</a>
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Type)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Skill)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Rating)
        </td>
        <td>
            <!-- this is where I would want the count to go. -->
        </td>
    </tr>
}
</table>

最后一期,没有在视图中显示任何结果。

这是控制器的相关部分:

    var units = db.Units;
    var students = db.Units.Select(u => new UnitViewModel()
    {
        Unit = u,
        TradeCount =
               db.Movies.Where(t => t.Name == u.Name).Count()
    });
    return View(students.ToPagedList(pageNumber, pageSize));
4

1 回答 1

2

获取服务器端所需的一切并将其传递给视图。您可以先在控制器 GET 操作中进行计数,然后使用 ViewBag 传递它或在视图模型中添加一个属性来保存计数。

    [HttpGet]
    public ActionResult MyView()
    {
       var units = _context.Units.Where(//whatever);

       var viewModels = units.Select(u => new UnitViewModel()
                                           {
                                               Unit=u,
                                               TradeCount =
                                                      context.Trades.Where(t => t.name == u.name).Count()
                                             });
       return View(viewModels);

    }

编辑:

我会为您的视图编写一个视图模型类。因此,视图不再使用 的模型List<Unit>,而是使用List<UnitViewModel>.

public class UnitViewModel
{
   public Unit Unit {get;set;}
   public int TradeCount {get;set;}
}

编辑视图:

 @model PagedList.IPagedList<FTv2.Models.UnitViewModel>

    <table style="border-width: 1px; border-color:#000000; border-style: solid; border-top: 2px; border-top-color:#000000; border-top-style: solid;">
        <tr>
            <th></th>
            <th>Name</th>
            <th>Type</th>
            <th>Skill</th>
            <th>Rating</th>
        </tr>

    @foreach (var item in Model) {

        <tr>
            <td>
                @{ ViewBag.ImgUrl = item.Name + ".png";}
                <a href="/Images/@ViewBag.ImgUrl" data-lightzap="" ><img src="/Images/@ViewBag.ImgUrl" HEIGHT="66" WIDTH="50" ></a>
            </td>
            <td>
                <a href="/ActiveTrades?Name=@item.Unit.Name">@Html.DisplayFor(modelItem => item.Unit.Name)</a>
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Unit.Type)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Unit.Skill)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Unit.Rating)
            </td>
            <td>
                  @Html.DisplayFor(modelItem => item.TradeCount)
            </td>
        </tr>
    }
    </table>
于 2013-07-05T14:27:03.657 回答