它看起來像一個合法的錯誤,這裏是我在我的搜索找到了最好的解決辦法:
http://forums.asp.net/t/1649193.aspx
總之。您纏繞問題,DropDownListFor
的來源,在自定義HTML擴展和手動檢索這樣不顯眼的客戶端驗證規則:
IDictionary<string, object> validationAttributes = htmlHelper.
GetUnobtrusiveValidationAttributes(
ExpressionHelper.GetExpressionText(expression),
metadata
);
然後您傳遞到您的自定義幫助其他HTML屬性結合您validationAttributes
字典你傳遞一起DropDownListFor
我使用的完整代碼(我有一個標籤,在那裏,你可以隨意去耦):
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));
}
將複選框添加到該框中,我有一個必選的複選框,在未選中時不會高亮顯示爲錯誤字段。 – JBeckton 2011-01-25 23:37:46
不是一個真正的答案,更多的解決方法,但你有沒有嘗試過使用IValidatableObject接口 - 現在可能會幫助你? – RichardW1001 2011-01-26 00:01:14
我已經在使用IValidatableObject進行服務器端驗證。這是客戶端問題。我確實在codeplex上找到了這個http://aspnet.codeplex.com/workitem/7629 – JBeckton 2011-01-26 00:26:49