使用相同的分部视图进行编辑和显示

本文关键字:编辑 显示 视图 | 更新日期: 2023-09-27 18:04:17

我想使用相同的局部视图来显示记录和编辑记录。这两个功能的布局将是相同的,它似乎比拥有一个EditRecord部分视图和一个DisplayRecord部分视图干净得多。如果我只有一个部分视图要更新,维护将容易得多。

我正在使用这个,它工作:

<div class="editor-label">
    @Html.LabelFor(model => model.FirstName)
</div>
<div class="editor-field">
    @if (@ViewBag.ViewMode == "display")
    {
        @Html.DisplayFor(model => model.FirstName)
    }
    else
    {
        @Html.EditorFor(model => model.FirstName)
    }
    @Html.ValidationMessageFor(model => model.FirstName)
</div>

有更好的方法吗?

谢谢。

使用相同的分部视图进行编辑和显示

我强烈建议使用单独的编辑和显示模板。试图以单一形式完成它们会使它们更令人困惑,并且从长远来看更难以维护。关注点分离是MVC的口头禅,而您正在尝试将关注点组合起来。

我的建议是使用两个局部视图。我相信它提供了一个更好的关注点分离,如果你使用剃刀,当你更新时你需要做的编辑量是最小的。

我也相信它代表了一个更好的模型,并允许在你的控制器和上面更好的分离

我最近有一个应用程序需要对相同的部分视图进行类似的重用。其想法是,用户只能看到显示版本,除非他们经过身份验证,然后进一步提出更改数据的请求。

为了避免大的IF语句,我在两者中都使用了相当于EditorFor的语句(MVC 3实际上还没有出来,所以我有更多的工作要做)。但关键是"显示版本"禁用了服务器端的所有内容,除非满足了需求。

两种情况下的外观都是编辑器的外观,但只有一种允许您实际编辑。除非您的需求不同,否则我建议您采用类似的策略。

虽然我赞同隔离关注点的重要性,但我不认为这是现代编程的唯一原则。那么代码重用呢?

在我看来,有两个几乎相同的部分视图需要一个共同的控件(在这种情况下是一个共同的部分视图)。我必须说,更新两个部分视图的维护开销超过了不分离编辑/显示功能所带来的任何弊端。如果我更改字段标签,添加/删除字段,更改类型或长度,我必须记住在两个地方做这些……并确保我在两者中做的完全相同。

我完全同意关注点的隔离,除了它似乎在更高的层次上更重要。保持表示层/业务层/数据层绝对分离。谁想回到经典ASP的时代?然而,我无法想象在局部视图中添加一些条件以允许代码重用会带来什么糟糕的结果。是不是很乱?好吧,有一点,但仍然相当可读,意图很明显。我想我问这个问题的原因是想看看是否有人有比条件语句更清晰的实现代码重用的方法。

是否有人同意在这种情况下代码重用比关注点隔离的好处更重要?如果有,有没有更好的实现方法?

谢谢