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

时间:2011-07-31 06:43:54

标签: c# .net asp.net-mvc asp.net-mvc-3 partial-views

我想使用相同的局部视图来显示记录和编辑记录。两个函数的布局都是相同的,它看起来比拥有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>

有更好的方法吗?

感谢。

4 个答案:

答案 0 :(得分:7)

我强烈建议使用单独的编辑和显示模板。尝试以单一形式进行这些操作会使它们更加混乱,并且从长远来看难以维护。关注点分离是MVC的口头禅,你正试图结合关注点。

答案 1 :(得分:1)

我的2美分是使用两个部分视图。我认为它提供了更好的关注点,如果你使用说razor,你在更新时需要做的编辑量很少。

我也相信它代表了一个更好的模型,并且可以在您的控制器及更高版本中实现更好的分离。

答案 2 :(得分:0)

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

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

在两种情况下,外观都是编辑器的外观,但只有一个允许您实际编辑。除非你的要求不同,否则我建议给你一个类似的方法。

答案 3 :(得分:-1)

虽然我对分离问题的重要性感到满意,但我认为这不是现代编程的唯一原则。代码重用怎么样?

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

我完全同意关注点的分离,除非它似乎在更高层次上更重要。保持演示文稿/业务/数据层绝对分离。谁想回到经典ASP的日子?但是,我无法想象由于向部分视图添加一些条件以允许代码重用而导致的不良后果。这是凌乱的吗?嗯,有点但仍然相当可读,意图很明显。我想我问这个问题的原因是为了看看是否有人使用更简洁的方式来实现代码重用而不是条件。

有人同意在这种情况下代码重用超过了关注点隔离的好处吗?如果是这样,有没有更好的方法来实现它?

由于