.net - 部分 View 没有 data-val* 属性

标签 .net unobtrusive partialviews data-annotations

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

如果我尝试在不选择正确值的情况下提交,则在页面验证的初始加载时效果很好。

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

如果我现在尝试提交这些动态控件的表单,尽管它们绑定(bind)到相同的模型,并且尽管我已经设置了正确的 .ValidationMessageFor 帮助程序,但它们不会出现验证,因为这些控件似乎不是使用data-val* 属性。

我使用fiddler并发现$.ajax发布到 Controller ,生成部分 View ,并且生成简单且没有生成ValidationMessage。因此不能对添加的动态控件使用不显眼的javascript。

是否有必要始终将 View 放在表单中?在这种情况下,我将有嵌套表单,这将无法正常工作。

编辑1: 正如 Adam Tuliper 在 question 中提到的ViewContext.FormContext = new FormContext 生成具有所有 data-val* 属性的部分 View 。因此回答了我上面的问题。 现在动态内容的验证没有触发。所以按照 Erick (在评论部分),我删除了表单验证器 [form.removeData('validator');],然后它也开始验证动态内容。

下面是部分 View

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

这是部分 View 的模型

    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; }

    }

最佳答案

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

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

分部 View 不会继承其所在页面的脚本,除非在 dom 更新后再次执行脚本。

关于.net - 部分 View 没有 data-val* 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6680156/

相关文章:

.net - 服务器端的 SignalR,但来自客户端的 native WebSockets 连接?

c# - 通知 C# 客户端,当 SMTP 服务器收到新邮件时

c# - 当新模型实例传递给局部 View 时,字段仍然包含表单数据

C# - 大型集合存储

c# - 如何绘制 DataGridViewComboBox 列中的非事件行?

jQuery 按钮处理程序与内联 onClick

javascript - 无法在函数调用中用变量值替换硬编码的属性名称值

jquery - 使用 jQuery 读取不显眼的数据

javascript - MVC 部分 View Javascript

asp.net-mvc - 在 MVC 中呈现局部 View