我的强类型视图中有多个@Html.BeginForm
,它继承自一个模型。模型中的某些字段为[Required]
,有些则不是。提交第二个@Html.BeginForm
时,它不包含第一个[Required] Html.TextBoxFor
中的一些@Html.BeginForm
项。因此,验证消息显示在第一个@Html.BeginForm
块中。
如果每个@Html.BeginForm
可以从不同的模型继承,生成TextBoxFor
和ValidationFor
的独立集合,那就太好了。
问题:在提交第二个表单时,是否有人知道如何在第一个表单中取消验证?
答案 0 :(得分:1)
好吧,假设您只有一个控制器可以处理您的所有表单。首先,您需要检查哪个表格是空的,如下所示:
@{
if(!Request["form1"].IsEmpty()){
//sending data form 1...
}
if(!Request["form2"].IsEmpty()){
//sending data form 2
}
if(!Request["form3"].IsEmpty()){
//sending data form 3
}
}
最佳做法是为每个表单分隔控制器或方法。
答案 1 :(得分:0)
我试图避免在我的视图中使用条件逻辑。我认为验证器的行为与我在页面中的多个表单上的预期不同。所以我最终删除了验证器和[Required]字段,并在控制器中添加了手动验证,如下所示:
StringBuilder sb = new StringBuilder();
if (mm.field1 == null)
sb.Append("<li>field1 is required</li>");
if (mm.field2 == null)
sb.Append("<li>field2 is required</li>");
// .... and on and on
if (sb.ToString != "")
{
ViewData["validationMessage1"] = "<ul>" + sb.ToString() + "</ul>";
return View("MyView",mm);
}
// Process form below here, at this point all required fields have passed validation