La validation du modèle n'évalue pas les attributs liés aux valeurs de la zone de liste si vous n'en sélectionnez pas au moins une. De cette façon, il n'est pas possible d'effectuer une évaluation de modèle à l'aide de DataAnnotations afin d'informer les valeurs requises.Les valeurs null de listbox ne sont pas évaluées dans la liaison de modèle de ASP.NET-MVC
Le contrôleur:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using TestValidation.Models;
namespace TestValidation.Controllers
{
[HandleError]
public class HomeController : Controller
{
private SelectList list = new SelectList(new List<string>()
{
"Sao Paulo",
"Toronto",
"New York",
"Vancouver"
});
public ActionResult Index()
{
ViewData["ModelState"] = "NOT EVAL";
ViewData["ItemsList"] = list;
return View();
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(MyEntity entity)
{
if (ModelState.IsValid)
{
ViewData["ModelState"] = "VALID";
}
else
{
ViewData["ModelState"] = "NOT VALID!!!";
}
ViewData["ItemsList"] = list;
return View();
}
public ActionResult About()
{
return View();
}
}
}
La vue:
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<TestValidation.Models.MyEntity>" %>
<asp:Content ID="indexTitle" ContentPlaceHolderID="TitleContent" runat="server">
Home Page
</asp:Content>
<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
<h2>
Validation Test</h2>
<p>
<% using (Html.BeginForm())
{%>
<fieldset>
<p>
ModelState:
<%= Html.Encode((string)ViewData["ModelState"])%>
</p>
<p>
<label for="Name">
Name:</label>
<%= Html.TextBoxFor(m => m.Name)%>
<%= Html.ValidationMessageFor(m => m.Name)%>
</p>
<p>
<label for="ItemFromList">
Items (list):</label>
<%= Html.ListBoxFor(m => m.ItemFromList, ViewData["ItemsList"] as SelectList)%>
<%= Html.ValidationMessageFor(m => m.ItemFromList)%>
</p>
<p>
<label for="ItemFromCombo">
Items (combo):</label>
<%= Html.DropDownListFor(m => m.ItemFromCombo, ViewData["ItemsList"] as SelectList)%>
<%= Html.ValidationMessageFor(m => m.ItemFromCombo)%>
</p>
<p>
<input type="submit" value="Submit" />
</p>
</fieldset>
<% } %>
</asp:Content>
Le modèle:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace TestValidation.Models
{
public class MyEntity_Validate : ValidationAttribute
{
public MyEntity_Validate()
{
this.ErrorMessage = "Validated!. Is <> Toronto";
}
public override bool IsValid(object value)
{
return ((string)value == "Toronto");
}
}
public class MyEntity
{
[Required]
public string Name { get; set; }
[MyEntity_Validate]
public string ItemFromList { get; set; }
[MyEntity_Validate]
public string ItemFromCombo { get; set; }
}
}
Toute aide serait très apprécié. Je vous remercie.
Bonne nouvelle! Scott Gu a déclaré: "L'équipe cherche à changer le comportement de la version finale d'ASP.NET MVC 2 pour valider toutes les propriétés par défaut". http://twitter.com/scottgu/statuses/8057127000 – smaglio81