0

在重写的应用程序中,最初的某个表单包括一个下拉菜单,用户可以在其中选择两个主要选项之一,以了解如何将输入用于其他地方的计算。

现在的要求规定,界面应该在同一页面上显示两个相同的表单,而不是这个下拉菜单,一个在另一个之上。参数或隐藏值用于确定是否在每个表单上设置了上述选项,以便两个选项中的每一个都有一个表单。这会在模型上设置一个布尔值。

我对表单的两种外观都使用相同的局部视图,在初始化期间定义它们的差异。但是,我仍然遇到一个特殊问题——如果一个表单上存在验证错误,它会同时出现在两个表单上。防止这种情况的最佳方法是什么?

我只是不得不屈服并制作几乎重复的部分视图,还是有办法继续使用相同的部分视图?

4

1 回答 1

1

你可以尝试这样的事情:

为表单创建一个基本模型。该基本模型将具有其两个子模型共有的属性和验证属性:

public class BaseModel {
    [Required]
    public string Name { get; set; }
}
public class Model1 : BaseModel {
    public bool Form1 { get; set; }
}
public class Model2 : BaseModel {
    public bool Form2 { get; set; }
}

然后,您可以创建两个接受这些模型作为参数的不同控制器操作:

public ActionResult PostForm1(Model1 model) { }
public ActionResult PostForm2(Model2 model) { }

您的部分视图必须根据它的形式添加一个输入:

<form action="<%=(isForm1 ? "/PostForm1" : "/PostForm2")>%">
    <input type="hidden" 
           id="<%=(isForm1 ? "Form1" : "Form2")%>" 
           name="<%=(isForm1 ? "Form1" : "Form2")%>" 
           value="true" />
</form>

当一个表单被发布时,它应该只对其模型进行验证,而不影响另一个模型(您需要一个视图模型,它具有两个表单模型作为属性)。

我不确定这是否可行,但同样,您可以尝试一下。

于 2012-04-13T13:43:43.987 回答