【问题标题】:What's the best practice for having 4 loops over same data in an MVC 4 view?在 MVC 4 视图中对相同数据进行 4 次循环的最佳实践是什么?
【发布时间】:2013-06-03 07:11:54
【问题描述】:

我有一个包含 4 列 (HTML Div) 的视图。每个都包含相同数据的不同子集,基于我的 Place 模型(我只是输出 name 属性,还有一个 category 属性 - 两个字符串)。

我可以创建一个 ViewModel,其中包含 4 个地点模型,每个模型都包含适当的数据。

我可以传入 4 个带有标记的字符串(可能不如将标记与数据混合?)。

这里的最佳做法是什么?

(我还需要按字母顺序按类别输出地点 - 在类别更改时输出标题 - 尽管这是次要要求)。

【问题讨论】:

    标签: asp.net linq sql-server-2008 asp.net-mvc-4


    【解决方案1】:

    您可能应该使用第一个选项,即包含 4 个PlaceViewModels 的 ViewModel。它将为您提供操作对象及其属性的灵活性,并根据需要显示它们;从长远来看,它还将改善视图的维护,

    @model PlacesViewModel
    
    @foreach (var place in Model.Places)
    {
        // Render your HTML column here 
    }
    

    通过传递一组 HTML 字符串(如第二个选项中所述),您将无法以任何有用的方式修改、检查、解析、迭代或操作您的对象。您将不得不使用某种客户端框架(例如 jQuery)来操作字符串。

    但是,如果您只是想遍历一组 PlaceViewModel,您可以考虑传递它们的列表,然后在您的 View 中执行类似的操作,

    @model List<PlaceViewModel>
    
    @foreach (var place in Model)
    {
        // Render your HTML column here
    }
    

    这将节省额外上课的需要。

    要按名称(或任何其他属性)的字母顺序对模型进行排序,请执行以下操作,

    @foreach (var place in Model.Places.OrderBy(place => place.Name))
    {
        // Render your HTML column here 
    }
    

    【讨论】:

    • 非常感谢。只传递一些 HTML 字符串是不好的做法吗?这将提供很大的灵活性(但我必须承认确实感觉不对)。
    • @user2254951 更新了我的答案以解释我的看法。
    • 所有列表都是指向另一个页面的 HTML 链接 - 因此一旦传入将不知道进一步操作。但只是将 HTML 从控制器传递到视图 - 这会被认为是不好的做法吗?
    • 嗯,不一定。我以为您将复杂的 HTML 结构传递回视图。如果它们只是 URL 或链接的列表,您可以使用 List&lt;string&gt;List&lt;MvcHtmlString&gt;。这真的取决于PlaceViewModel 结构的复杂程度。
    猜你喜欢
    • 2015-01-17
    • 2015-02-04
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 2020-03-19
    相关资源
    最近更新 更多