J'ai un simple site Web MVC qui affiche une boîte de dialogue jquery à des fins d'édition. Dans cette boîte de dialogue se trouve une zone de texte qui accepte une liste de compétences délimitées par des virgules que l'utilisateur peut saisir. Lors de la soumission, ma reliure modèle transforme cela en Liste. Voici le code pour mon modèle liant.NET MVC validation discrète et classeur de modèle personnalisé
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();
}
}
}
Et voici le code de mon point de vue partielle
@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>
Tous mes simples tels que des validations [Obligatoire] en travaillant sur le côté client. La validation du classeur fonctionne également, mais le message d'erreur n'est pas affiché. Je suppose qu'il me manque quelque chose dans le javascript pour enregistrer l'erreur mais je ne peux pas comprendre ce que c'est. Toute aide serait appréciée. Merci.
Voici une capture d'écran du problème