单个视图中的多个表单
Posted
技术标签:
【中文标题】单个视图中的多个表单【英文标题】:Multiple forms in a single view 【发布时间】:2013-12-27 05:02:10 【问题描述】:我的强类型视图中有多个@html.BeginForm
,它继承自一个模型。模型中的某些字段是[Required]
,而有些则不是。提交第二个@Html.BeginForm
时,它不包括第一个@Html.BeginForm
中的一些[Required] Html.TextBoxFor
项目。结果,验证消息显示在第一个 @Html.BeginForm
块中。
如果每个@Html.BeginForm
都可以从不同的模型继承,从而产生独立的TextBoxFor
和ValidationFor
集,那就太好了。
问题:有谁知道在提交第二个表单时如何禁止第一个表单中的验证?
【问题讨论】:
【参考方案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
最好将每个表单的控制器或方法分开。
【讨论】:
是的,我对每个表单都有单独的方法,但它们位于一个控制器中,该控制器还控制 3 或 4 个其他视图。我认为下一组 View 可能需要一个新的控制器,我们拭目以待 只是一些可能对您有用的想法,如果您最终自定义验证,为什么不先在客户端处理验证,然后在服务器上处理? 当然我想可以使用自定义 JQuery .blur(function()) 但不能使用内置 MVC ValidationMessageFor。是的,这只是时间问题,一旦系统建立,我会返回并添加客户端验证。感谢您的建议。【参考方案2】:我试图在我的视图中避免条件逻辑。我认为验证器在一个页面中的多个表单上的行为不像我预期的那样。所以我最终一起删除了验证器和 [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
【讨论】:
以上是关于单个视图中的多个表单的主要内容,如果未能解决你的问题,请参考以下文章
Django 表单:查询结果定义的字段,单个视图同时更新多个对象
我可以在 django 中的单个表单中使用多个表单集,如果可以的话如何?
单个 UIViewController 中的多个集合视图未调用 cellForItemAtIndexPath indexPath