将单个表单拆分为多个部分视图是否被认为是不良实践?

5
我目前正在开发一个ASP.NET MVC 3应用程序,其中有一个特定的视图设置为向导形式(使用jQuery插件)。每个向导步骤都是单个表单的一部分,其中每个“步骤”都分割成自己的<div>元素。我决定为每个“步骤”的内容创建部分视图。我这样做的原因之一是使每个步骤的代码整洁有序,另一个原因是它允许我更轻松/整洁地在服务器端包含或排除向导步骤。
现在,我的“主”视图看起来像以下内容:
@using (Html.BeginForm)
{
    <div class="step" id="step1">
        @Html.Partial("Step1")
    </div>

    <div class="step" id="step2">
        @Html.Partial("Step2")
    </div>
}

我想知道像这样做是否被认为是不好的做法,是否应该将所有"步骤"的代码合并到一个视图中?

1个回答

2

不,这种方法本身没有什么问题。

虽然有一点性能开销,但可能并不重要。

如果这样做可以让你更轻松地开发和维护,请随意使用。

编辑:如果你担心映射子模型(我们在评论中提到过),考虑在局部视图中使用ViewData.ModelMetadata.PropertyName来推导输入控件的ID。


谢谢Steve。我一直在思考如何处理视图模型的问题。通常我喜欢每个视图/局部视图都有一个视图模型。如果我为每个局部视图创建视图模型,然后将它们作为参数传递给Html.Partial,那么当表单被提交回服务器/控制器时,我不会遇到绑定问题吗? - Justin Holzer
这种方法在某些情况下也可能会有所帮助。如果您的部分Step2是以可重复使用的方式设计的。例如,Step2可以用于创建/插入页面,也可以用于作为更新/编辑功能的页面。 - Matt Cofer
只要输入字段的ID与父模型相关,您就不需要。但是,如果您不打算将部分视图与其他模型重用,则没有必要传递除主模型以外的任何内容。 - Steve Morgan
截至目前,我的父视图模型具有每个部分的视图模型类型属性。因此类似于 Step1ViewModel Step1ViewModel {get; set;}。然后,我的每个部分都将父视图模型用作模型对象,并且它们定义其表单字段,例如 @Html.TextBoxFor(x => x.Step1ViewModel.SomeStep1Value) - Justin Holzer
@Matt:部分视图现在可以被重复使用。然而,有几个问题我不太喜欢,这也是我提出初始问题的原因之一。其中一个问题是为了正确使用它们,必须将它们呈现在表单标记内部。另一个问题是部分视图目前正在使用父视图模型对象,以便我可以正确地使用Html助手方法生成表单字段,而不必硬编码DOM ID或创建自定义模型绑定器。 - Justin Holzer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接