parece un error legítimo, aquí es la mejor solución que he encontrado en mi búsqueda:
http://forums.asp.net/t/1649193.aspx
en resumen. Se coloca la fuente del problema, DropDownListFor
, en una extensión de HTML personalizado y recuperar manualmente las reglas de validación clientside discretos como este:
IDictionary<string, object> validationAttributes = htmlHelper.
GetUnobtrusiveValidationAttributes(
ExpressionHelper.GetExpressionText(expression),
metadata
);
Luego se combina su diccionario validationAttributes
con cualquier otro atributo html pasado a su ayudante personalizada y se pasa junto al que DropDownListFor
El código completo que estoy usando (tengo una etiqueta en allí también, puede sentirse libre para desacoplar):
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));
}
Agregue casillas de verificación a eso también, tengo una casilla de verificación requerida que no se enciende como un campo de error cuando no está marcada. – JBeckton
Realmente no es una respuesta, es más una solución alternativa, pero ¿ha intentado utilizar la interfaz IValidatableObject? ¿Podría ayudarlo por ahora? – RichardW1001
Ya estoy usando IValidatableObject para la validación del lado del servidor. Este es un problema del lado del cliente. Encontré un problema abierto en Codeplex para este http://aspnet.codeplex.com/workitem/7629 – JBeckton