单个视图中的多个表单

时间:2013-12-27 05:02:10

标签: c# asp.net-mvc forms view model

我的强类型视图中有多个@Html.BeginForm,它继承自一个模型。模型中的某些字段为[Required],有些则不是。提交第二个@Html.BeginForm时,它不包含第一个[Required] Html.TextBoxFor中的一些@Html.BeginForm项。因此,验证消息显示在第一个@Html.BeginForm块中。

如果每个@Html.BeginForm可以从不同的模型继承,生成TextBoxForValidationFor的独立集合,那就太好了。

问题:在提交第二个表单时,是否有人知道如何在第一个表单中取消验证?

2 个答案:

答案 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