ASP.NET MVC 2:使用重复的输入部分视图,无需重复验证

时间:2012-04-13 13:28:12

标签: asp.net asp.net-mvc asp.net-mvc-2 partial-views

在正在重写的应用程序中,最初某个表单包含一个下拉列表,用户在其他地方的计算中选择输入的两个主要选项之一。

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

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

我是否只需要放弃并制作近乎重复的部分视图,或者是否有办法继续使用相同的视图?

1 个答案:

答案 0 :(得分: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>

当表单发布时,它应该只对其模型进行验证并保持其他模型不变(您需要一个将表单模型作为属性的视图模型)。

我不确定这是否有效,但是,你可以尝试一下。