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]
,並且在下拉列表中沒有選擇任何值,但該帖子會經過而不是停止並追加驗證消息。我不知道該如何解決這個問題,因爲當複製粘貼到常規視圖時,它工作得很好。爲什麼不通過局部視圖驗證工作?
您在視圖中包含哪些JavaScript文件?我假設你有jQuery,jQuery驗證器,jQuery不顯眼的驗證器和其他(如AJAX等) – 2012-04-09 22:01:01
事實上,你的第一個答案是正確的。但是,您有一個錯誤,導致它無法正常工作。一旦我發現錯字,它工作得很好。你有'.validator.unobtrusive.parse('#Content');',但它應該是'('.Content')',因爲內容是一個類而不是一個id。 – 2012-04-09 22:01:21
啊好的完美!我看起來並不那麼親密,並且假設你在那裏有一個ID。做得好! – 2012-04-09 22:03:43