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

时间:2011-07-13 14:02:59

标签: .net unobtrusive partialviews data-annotations

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

如果我尝试在没有选择正确值的情况下提交,则页面验证的初始加载工作正常。

我还在页面上有另一个按钮,如果单击该按钮,则会在页面上加载同一局部视图的另一个实例,使用$ .ajax()发布到Controller,它只返回PartialView,并将其附加到现有div。

如果我现在尝试提交表单这些动态控件,虽然它们绑定到相同的模型,虽然我已经设置了正确的.ValidationMessageFor帮助程序,但是没有为它们显示验证,因为控件似乎没有生成data-val * attributes。

我使用fiddler并发现$ .ajax发布到控制器,生成部分视图,简单而没有ValidationMessage也生成.Hence不能使用不显眼的javascript来添加动态控件。

是否有必要始终在窗体中显示视图?在这种情况下,我将使用嵌套窗体,但这样也无法正常工作。

编辑1: 正如Adam Tuliper在question 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; }

    }

2 个答案:

答案 0 :(得分:2)

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

<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升级后再次执行。

答案 1 :(得分:1)

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