2012-04-09 53 views
1

此验证应该可以正常工作,但是如果下拉列表中没有选定的值,该帖子就会触发它。当移动到另一个非部分验证工作就好了。为简洁起见进行编辑。为什么验证会在部分视图中断裂?

视图模型:

public class BuilderVM 
{ 
    [Display(Name = "Select A Task")] 
    [Required] 
    public int? TaskId { get; set; } 
    public GenericSelectList Tasks { get; set; } 
} 

父视图(部分观点是在后门柱这个页面的底部呈现为您可能已经注意到,阿贾克斯选项规定,部分观点将在DIV呈现。 id="MoveOn"):

@{ 
ViewBag.Title = "Builder"; 
AjaxOptions ajaxOpts = new AjaxOptions 
{ 
    LoadingElementDuration = 2, 
    LoadingElementId = "removeChoice", 
    UpdateTargetId = "MoveOn" 
}; 
} 
<div id="removeChoice"> 
@using (Ajax.BeginForm("Selected", ajaxOpts)) 
{ 
<fieldset> 
    <div> 
    //Data For Submission (This data validates perfectly before post) 
    </div> 
    <p><input type="submit" value="Go" /></p> 
</fieldset> 
} 
</div> 
<div id="MoveOn"></div> 

局部视图(从父视图的柱后呈现):

@model namespace.BuilderVM 
@{ 
AjaxOptions ajaxOpts = new AjaxOptions 
    { 
    UpdateTargetId = "Entry", 
    LoadingElementDuration = 2, 
    LoadingElementId = "RemoveEntry" 
    }; 
} 

<div id="RemoveEntry"> 
<h2>Details</h2> 
@using (Ajax.BeginForm("Data", ajaxOpts)) 
{ 
@Html.ValidationSummary(true) 
<fieldset> 
<legend>Data</legend> 
<div> 
    <span class="label">@Html.LabelFor(model => model.TaskId)</span> 
    <span class="content"> 
    @Html.DropDownListFor(
     model => model.TaskId, 
     new SelectList(
      Model.Tasks.Values, 
      "Id", 
      "DisplayFields", 
      Model.Tasks.StartValue 
     ), 
     Model.Tasks.Message 
    ) 
    </span>@Html.ValidationMessageFor(model => model.TaskId) 
</div> 
<p><input type="submit" value="Add Work Completed Data" /></p> 
</fieldset> 
} 
</div> 
<div id="Entry"></div> 

尽管dropdownlistfor绑定到model.TaskId,当单击后按钮(input type="submit")时,它被注释为[Required],并且在下拉列表中没有选择任何值,但该帖子会经过而不是停止并追加验证消息。我不知道该如何解决这个问题,因为当复制粘贴到常规视图时,它工作得很好。为什么不通过局部视图验证工作?

回答

3

问题是验证器只是在开始时加载(使用$(document).ready())。 你可以做如下(在局部视图插入):

<script> 
     $(function() { 
      $.validator.unobtrusive.parse('.Content'); 
     }); 
    </script> 

从我以为这是你的问题给定的信息。希望这可以帮助你。

+0

您在视图中包含哪些JavaScript文件?我假设你有jQuery,jQuery验证器,jQuery不显眼的验证器和其他(如AJAX等) – 2012-04-09 22:01:01

+0

事实上,你的第一个答案是正确的。但是,您有一个错误,导致它无法正常工作。一旦我发现错字,它工作得很好。你有'.validator.unobtrusive.parse('#Content');',但它应该是'('.Content')',因为内容是一个类而不是一个id。 – 2012-04-09 22:01:21

+0

啊好的完美!我看起来并不那么亲密,并且假设你在那里有一个ID。做得好! – 2012-04-09 22:03:43

相关问题