繁体   English   中英

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

[英]asp.net mvc - pass partial data model to partial view

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

在视图中:

@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. 编译器不允许我将Barnd发送到局部视图。
  2. 如果您查看部分视图代码,您将看到Brand这个词,它是列名。 我不希望在局部视图中硬编码“Brand”这个词,而是我喜欢列名称将在那里。
  3. 在局部视图中我需要放置@model products_comparison.Models.Product,但我不想发送孔表。 我只想发一个专栏 - 但我不知道该放什么..

谢谢!

编辑:

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

首先重构并将正确的逻辑放在正确的位置。 此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>

1尝试将@Html.RenderPartial("_DisplayAttribute",Brand)更改为@Html.Partial("_DisplayAttribute",Brand)

您还需要在局部视图中指定模型,如@model products_comparison.Models.Brand或类似的东西

另外请澄清2和3,因为他们不清楚你想要什么

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM