sembra un bug legittima, ecco la soluzione migliore che ho trovato nella mia ricerca:
http://forums.asp.net/t/1649193.aspx
in breve. Si avvolgono l'origine del problema, DropDownListFor
, in un'estensione Html personalizzato e di recuperare manualmente i discreti regole di validazione lato client come questo:
IDictionary<string, object> validationAttributes = htmlHelper.
GetUnobtrusiveValidationAttributes(
ExpressionHelper.GetExpressionText(expression),
metadata
);
Poi si combinano il dizionario validationAttributes
con altri attributi HTML passati in vostro aiuto personalizzato e si passa che insieme a DropDownListFor
Il codice completo che sto usando (ho un'etichetta anche lì, si può sentire libero di disaccoppiare):
public static IHtmlString DropDownListWithLabelFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, string label, IEnumerable<SelectListItem> items, string blankOption, object htmlAttributes = null)
{
var l = new TagBuilder("label");
var br = new TagBuilder("br");
var metadata = ModelMetadata.FromLambdaExpression(expression, helper.ViewData);
var mergedAttributes = helper.GetUnobtrusiveValidationAttributes(ExpressionHelper.GetExpressionText(expression), metadata);
if (htmlAttributes != null)
{
foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(htmlAttributes))
{
object value = descriptor.GetValue(htmlAttributes);
mergedAttributes.Add(descriptor.Name, value);
}
}
l.InnerHtml = label + br.ToString(TagRenderMode.SelfClosing) + helper.DropDownListFor(expression, items, blankOption, mergedAttributes);
return MvcHtmlString.Create(l.ToString(TagRenderMode.Normal));
}
Aggiungere le caselle di controllo anche a questo, ho una casella di controllo richiesta che non è illuminata come un campo di errore quando non è selezionata. – JBeckton
Non è davvero una risposta, più una soluzione alternativa, ma hai provato a utilizzare l'interfaccia IValidatableObject - potrebbe aiutarti per ora? – RichardW1001
Sto già utilizzando IValidatableObject per la validazione lato server. Questo è un problema lato client. Ho trovato un problema aperto in codeplex per questo http://aspnet.codeplex.com/workitem/7629 – JBeckton