带有模型和视图包的视图中的 C# MVC foreach 循环

Posted

技术标签:

【中文标题】带有模型和视图包的视图中的 C# MVC foreach 循环【英文标题】:C# MVC foreach loop in view with model and viewbag 【发布时间】:2017-08-08 19:23:46 【问题描述】:

控制器:

public ActionResult SelectPlaats()
        

            var one = repository.GetAllReserveringen.Where(x => x.StartDatum >= x.StartDatum
                    && x.StartDatum <= x.EindDatum).Select(p => p.Plaats);
            var two = repository.GetAllPlekken.Select(p => p.Plaatsnummer);
            ViewBag.vrijeplekken = two.Except(one).ToList();

            return View(repository.GetAllPlekken);
        

查看:

@using Camping.Domain.Entities
@model IEnumerable<Plek>

@
    ViewBag.Title = "Beschikbare campingplekken";
    Layout = "~/Views/Shared/_Layout.cshtml";


<div class="panel panel-default">

    <div class="panel-heading">
        <h3>Overzicht van alle klanten</h3>
    </div>
    <div class="panel-body">
        <table class="table table-striped table-condensed table-bordered">
            <tr>
                <th>Plaatsnummer</th>
                <th>Veldnaam</th>
                <th>Type</th>
                <th>Vierkante meter</th>
                <th>Amp</th>
                <th>Wifi</th>
                <th>Water</th>
                <th>Riool</th>
                <th>CAI</th>
                <th>PPN</th>
                <th>Seizoenplek</th>
                <th class="text-center">Reserveren</th>
            </tr>

            @foreach (var item in Model.Where(x => x.Plaatsnummer == ViewBag.vrijeplekken))
            
                <tr>
                    <td>@item.Plaatsnummer</td>
                    <td>@item.Veldnaam</td>
                    <td>@item.Type</td>
                    <td>@item.Vierkantemeter</td>
                    <td>@item.Amp</td>
                    <td>@item.Wifi</td>
                    <td>@item.Water</td>
                    <td>@item.Riool</td>
                    <td>@item.CAI</td>
                    <td>@item.PPN</td>
                    <td>@item.Seizoenplek</td>
                    <td class="text-center">
                        @using (Html.BeginForm("SelectPlek", "Reservering"))
                        
                            @Html.Hidden("Id", item.Plaatsnummer)
                            <input type="submit"
                                   class="btn btn-default btn-xs"
                                   value="Reserveren" />
                        
                    </td>
                </tr>
            
        </table>
    </div>
</div>

所以我们有了模型,其中包含我的露营应用程序所具有的所有露营边 + 详细信息。但我只想在此视图中显示免费露营地。

我从我的数据库中提取了所有免费的露营,并将它们放入我的 Viewbag.vrijeplekken 中,其中包含一个边号列表 (Plaatsnummer)。

我不知道如何获得一张只有免费露营地编号但包含所有露营地都有详细信息的桌子。

我希望任何人都可以帮助我。提前致谢!

【问题讨论】:

为什么要使用 viewbag 而不仅仅是将其添加为模型的一部分并在循环中使用它? 【参考方案1】:

您的视图应该只关心呈现它在(视图)模型中接收到的数据。 由控制器选择要显示的数据。

正如德里克所说:

public Actionresult SelectPlaats()

   var one = repository.GetAllReserveringen.Where(x => x.StartDatum >= x.StartDatum && x.StartDatum <= x.EindDatum).Select(p => p.Plaats).ToList(); 
   return View(repository.GetAllPlekken.Where(p => !one.Contains(p.plaatsnummer)).ToList());

public Actionresult SelectPlaats()

   var one = repository.GetAllReserveringen.Where(x => x.StartDatum >= x.StartDatum && x.StartDatum <= x.EindDatum); 
   return View(repository.GetAllPlekken.Except(one).ToList());

在你看来:

@foreach (var item in Model)
 
   ....

【讨论】:

我只是不太懂代码。免费露营地与一般露营地列表有何联系? 在一个中,您可以获得所有被占用的位置的列表。那么您传递给视图的模型包含所有点的列表,除了“one”中的点(被占用的点)。 啊,我现在明白了。我错过了“!一个”。谢谢你:)

以上是关于带有模型和视图包的视图中的 C# MVC foreach 循环的主要内容,如果未能解决你的问题,请参考以下文章

C# mvc 3 在视图中使用带有选定值的选择列表

带有控制器 MVC c# 的部分视图

通用视图模型控制 (MVC)

asp.net mvc c# - 是不是可以从 CodeBehind 中的模型访问视图中文本框的值?

配置文件对象 + 视图模型 + 更新用户配置文件 MVC C#

使用 MVC5 C# 和 Razor 在局部视图中运行 javascript