在正在重写的应用程序中,最初某个表单包含一个下拉列表,用户在其他地方的计算中选择输入的两个主要选项之一。
现在的要求规定,不是这个下拉菜单,界面应该有两个相同的形式出现在同一页面上,一个在另一个之上。参数或隐藏值用于确定是否在每个表单上设置上述选项,以便两个选项中的每一个都有一个表单。这会在模型上设置一个布尔值。
我对表单的两个外观使用相同的局部视图,在初始化期间定义它们的差异。但是,我仍然有一个特定的问题 - 如果一个表单上有验证错误,它会出现在两个表单上。防止这种情况的最佳方法是什么?
我是否只需要放弃并制作近乎重复的部分视图,或者是否有办法继续使用相同的视图?
答案 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>
当表单发布时,它应该只对其模型进行验证并保持其他模型不变(您需要一个将表单模型作为属性的视图模型)。
我不确定这是否有效,但是,你可以尝试一下。