asp.net mvc - 将部分数据模型传递到部分视图

2023-12-19

我希望构建一个获取模型列并打印它的局部视图。 像这样的东西:

在视图中:

@model IEnumerable<products_comparison.Models.Product>
@{
ViewBag.Title = "Index";

var Brand = (from r in Model
             select r.Brand).Distinct();
}
<h2>
Index</h2>

@Html.RenderPartial("_DisplayAttribute",Brand)

并在局部视图中:

<table>
    <tr>
        <th>
            Brand
        </th>
    </tr>
    @foreach (var row in Model)
    {
        <tr>
            <td>
                @Html.DisplayFor(r => row)
            </td>
        </tr>
    }
</table>

我遇到了一些问题:

  1. 编译器不允许我将 Brand 发送到部分视图。
  2. 如果您查看部分视图代码,您将看到 Brand 一词,它是列名称。我不希望在部分视图中对“品牌”一词进行硬编码,相反,我喜欢列名称在那里。
  3. 在部分视图中,我需要放置@model products_comparison.Models.Product,但我没有 想发孔表。我只想发送一栏 - 但我不知道该放什么..

Thanks!

EDIT:

只是为了澄清一件事,我希望视图将为表中的每一列调用相同的部分视图(无论如何对于表中的大多数列),并且每次我将发送不同的列(不同的值列为精确的)。


首先重构并将正确的逻辑放入正确的位置。此 LINQ 查询与视图中严格无关。视图不应执行任何 LINQ 查询或任何提取数据的操作。视图应该处理以视图模型的形式从控制器操作传递给它的数据。控制器操作构建并传递您为视图定义的适应视图模型。

因此,与往常一样,您首先定义一个将适应您的视图要求的视图模型:

public class MyViewModel
{
    public IEnumerable<Brand> Brands { get; set; } 
}

然后编写一个控制器操作来填充此视图模型并将其传递给视图:

public ActionResult Foo()
{
    IEnumerable<products_comparison.Models.Product> products = ...
    var model = new MyViewModel
    {
        Brands = (from r in Model select r.Brand).Distinct()
    };
    return View(model);
}

然后是一个视图:

@model MyViewModel
<table>
    <tr>
        <th>
            Brand
        </th>
    </tr>
    @Html.DisplayFor(x => x.Brands)
</table>

最后,您可以定义一个相应的显示模板,该模板将自动为每个元素呈现Brands您的视图模型的集合(~/Views/Shared/DisplayTemplates/Brand.cshtml):

@model Brand
<tr>
    <td>
        @Html.DisplayForModel()
    </td>
</tr>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

asp.net mvc - 将部分数据模型传递到部分视图 的相关文章

随机推荐