我有一個簡單的MVC網站,顯示用於編輯目的的jQuery對話框。在這個對話框中是一個textarea,它接受用戶可以輸入的以逗號分隔的技能列表。提交後,我的模型綁定器將其變爲列表。這裏是粘合劑.NET MVC不引人注意的驗證和自定義模型綁定器
public class EditSkillsModelBinder : DefaultModelBinder
{
protected override void OnModelUpdated(ControllerContext controllerContext,
ModelBindingContext bindingContext)
{
var form = controllerContext.HttpContext.Request.Form;
var skillsAsString = form["SkillsAsString"];
var user = bindingContext.Model as UserEditDetailsModel;
//FOR VALIDATION
ValueProviderResult valueResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
ModelState modelState = new ModelState {Value = valueResult};
if (string.IsNullOrEmpty(skillsAsString))
{
bindingContext.ModelState.AddModelError("Skills", "You must enter at least one skill.");
}
else
{
user.Skills = string.IsNullOrEmpty(skillsAsString) ? new List<string>() : skillsAsString.Split(',').Select(i => i.Trim()).ToList();
}
}
}
我的模型的代碼,這是我的部分觀點
@using (Ajax.BeginForm("EditUserDetails", new { }, new AjaxOptions { }, new { id = "EditUserDetailsForm" }))
{
@Html.ValidationSummary(true)
<fieldset>
<legend>UserEditDetailsModel</legend>
<div class="editor-label">
@Html.LabelFor(model => model.FirstName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.FirstName)
@Html.ValidationMessageFor(model => model.FirstName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.LastName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.LastName)
@Html.ValidationMessageFor(model => model.LastName)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Skills)
</div>
<div class="editor-field">
@Html.TextArea("SkillsAsString", Model.Skills.ToCommaSeparatedString())
@Html.ValidationMessageFor(model => model.Skills)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
@*Enable Client Side Validation*@
<script type="text/javascript">
$(document).ready(function() {
$.validator.unobtrusive.parse("#content_container > form");
});
</script>
所有我簡單的驗證,如[必填]作爲在客戶端使用的代碼。模型聯編程序驗證也起作用,但是,錯誤消息未顯示。我假設我錯過了一些JavaScript的註冊錯誤,但我不知道它是什麼。任何幫助,將不勝感激。謝謝。
這是問題的一個屏幕截圖