【问题标题】:am i using asp.net mvc correctly?我正确使用 asp.net mvc 吗?
【发布时间】:2009-08-13 16:13:17
【问题描述】:

所以几周后,我开始了解 asp.net mvc 并转换了两个 webforms 网站。除了端口之外,还进行了一些重构以将模型、控制器和视图代码完全分开。

我认为我认为仍需要改进的一个模式如下,我想就这些项目提供建议或反馈,因为我不确定这些气味有多糟糕。

  1. 问题:控制器中的 HTML 渲染知识 - 很容易让您的业务逻辑生成一堆 HTML 并将其推入 ViewData,然后让您的视图成为一堆看起来像这样的代码:

    `

    `

    `

对此最好的解决方案是什么?在我看来,我显然想避免这种逻辑?我是否应该将数据推送到客户端并在 HTMLHelper 类中使用这种“渲染”逻辑

我最终在构建 HTML 表格的控制器类中得到了这样的代码。 .

Stringbuilder gridBuilder = new StringBuilder();

        while (index < objDS.Count)
        {
            // start of table row
            gridBuilder.AppendLine("<tr align=\"center\">");
            for (int column = 0; column < numberOfColumns; column++)
            {
                if (index < objDS.Count)
                {
                    int record = (index) + ((objDS.CurrentPageIndex) * 12);
                    DataRow dr = photosDataSet.Tables[0].Rows[record];
                    gridBuilder.AppendLine("<td width=\"187.5\" valign=\"top\">");
                    int pictureNumber = Convert.ToInt32(dr.ItemArray[0].ToString());
                    string picnum = pictureNumber.ToString().PadLeft(3, '0');
                    int picNumberlink = pictureNumber - 1;
                    string image = "/pics/" + AlbumName + "/Thumbnails/" + AlbumName + "-pic" + picnum + ".jpg";
                    gridBuilder.AppendLine("<a id=\"picLinks_" + record + "\" class=\"picLinks\" href=''><img class=\"instant ishadow50\"  src=\"" + image + "\"></img></a>");
                    gridBuilder.AppendLine("<br/>");
                    gridBuilder.AppendLine(dr.ItemArray[1].ToString());
                    gridBuilder.AppendLine("</td>");
                }
                index++;
            }
            gridBuilder.AppendLine("</tr>");
        }
        gridBuilder.AppendLine("</table>");

        ViewData["Content"] = gridBuilder.ToString();

【问题讨论】:

    标签: asp.net html asp.net-mvc


    【解决方案1】:

    答案是 - 你的控制器中没有 html。如果您不能按照建议使用 MvcContrib 中的网格,那么您应该创建一个接受 DataTable 并输出 html 的类 - 在重写的 ToString 方法或您调用的特定方法中。

    并像这样使用它:

    <%= new MyGridGenerator(DataTable ..) %>
    

    【讨论】:

      【解决方案2】:

      在我看来,HTML 编码应该在视图中完成,因为它是特定于 HTML 的。如果将此编码移到控制器上,您将消除使用视图的主要优势:将格式化逻辑与业务逻辑分离。

      【讨论】:

      • 我的问题是我在控制器中有知道 HTML 的代码。我会更新问题
      【解决方案3】:

      为了呈现 HTML 表格,我建议您使用来自 MvcContribGrid 组件。

      【讨论】:

        猜你喜欢
        • 2015-09-27
        • 1970-01-01
        • 2011-10-24
        • 1970-01-01
        • 1970-01-01
        • 2011-03-13
        • 2014-02-28
        • 2015-06-25
        • 2022-01-08
        相关资源
        最近更新 更多