【问题标题】: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 都可以从不同的模型继承,从而产生独立的TextBoxForValidationFor 集,那就太好了。

问题:有谁知道在提交第二个表单时如何禁止第一个表单中的验证?

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2012-04-03
      • 1970-01-01
      • 1970-01-01
      • 2020-06-24
      • 2016-02-19
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多