分部视图中没有data-val*属性



我有一个带有Html.BeginForm()的视图,它调用在主视图模型中传递的部分视图(下面提到的没有Form)。模型有数据注释

在初始加载的页面验证工作完美,如果我试图提交没有选择适当的值。

我还在页面上有另一个按钮,如果点击加载页面上相同的部分视图的另一个实例,使用$.ajax() post到控制器,它返回只是PartialView,并将其附加到现有的div。

如果我现在尝试提交表单这些动态控件,尽管它们绑定到相同的模型,尽管我已经设置了正确的. validationmessagefor helper,但由于控件似乎不是用data-val*属性生成的,因此不会出现对它们的验证。

我使用提琴,发现$。ajax post到控制器,生成带有简单且没有ValidationMessage的部分视图。因此,不能使用不显眼的javascript来添加动态控件。

是必要的有视图内的表单总是吗?,在这种情况下,我将使用嵌套表单,这将无法正常工作。

编辑1:正如Adam Tuliper在问题ViewContext中提到的。FormContext = new FormContext生成了带有所有data-val*属性的部分视图。这就是我上述问题的答案。现在,对动态内容的验证没有启动。因此,根据Erick(在评论部分),我删除了表单验证器[form. removedata (' validator ');],然后它也开始验证动态内容。

下面是部分视图

         <div id="divVehicleInfo">                        
        <fieldset>
            <legend>Vehicle Information</legend>
          @for (var i = 0; i < Model.QuoteInput.Vehicle.Count(); i++)
          {
            <div class="editor-label">
                @Html.LabelFor(model => model.Vehicle[i].VehicleMake)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Vehicle[i].VehicleMake)
                @Html.ValidationMessageFor(model => model.Vehicle[i].VehicleMake)
            </div>
             <div class="editor-label">
                @Html.LabelFor(model => model.Vehicle[i].VehicleModel)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Vehicle[i].VehicleModel)
                @Html.ValidationMessageFor(model => model.Vehicle[i].VehicleModel)
            </div>
          }                              
        </fieldset>                
        </div>

这是局部视图的模型

    public class Vehicle
    {
        public int VehicleID { get; set; }
        [Required]
        [DisplayName("Vehicle Make")]
        public string VehicleMake { get; set; }
        [Required]
        [DisplayName("Vehicle Model")]
        public string VehicleModel { get; set; }
    }

您需要在分部视图中包含不显眼的验证脚本。

<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

局部视图不会继承它所在页面的脚本,除非它们在dom更新后再次被执行。

正如Adam Tuliper在问题ViewContext.FormContext = new FormContext中提到的那样,生成了具有所有data-val*属性的部分视图。这就是我上述问题的答案。现在,对动态内容的验证没有启动。因此,根据Erick(在评论部分),我删除了表单验证器[form.removeData(‘validator’);],然后它开始验证动态内容。

相关内容

  • 没有找到相关文章

最新更新