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

问题描述:

在重写的应用程序中,最初某个表单包含一个下拉列表,其中用户选择了两个主要选项中的一个,以确定输入在其他位置的计算方式。ASP.NET MVC 2:使用重复输入的部分视图,无需重复验证

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

我对表单的两种外观都使用相同的局部视图,在初始化过程中定义它们的差异。但是,我仍然遇到一个特定的问题 - 如果在一个表单上存在验证错误,它将显示在两个表单上。什么是防止这种情况的最好方法?

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

您可以试试这样的:

为表单创建一个基本模型。这种示范基地将有属性和常见到它的两个子模型验证特性:

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> 

当窗体被发布,它应该只做验证其模型和不改变其他模型(你需要一个视图模型,它既有模型的形式,也有属性)。

我不确定这是否有效,但同样可以尝试。