nó trông giống như một lỗi chính đáng, đây là cách giải quyết tốt nhất mà tôi đã tìm thấy trong tìm kiếm của tôi:
http://forums.asp.net/t/1649193.aspx
Nói tóm lại. Bạn quấn nguồn gốc của vấn đề, DropDownListFor
, trong một phần mở rộng Html tùy chỉnh và bạn tự lấy quy tắc xác nhận clientside không phô trương như thế này:
IDictionary<string, object> validationAttributes = htmlHelper.
GetUnobtrusiveValidationAttributes(
ExpressionHelper.GetExpressionText(expression),
metadata
);
Sau đó bạn kết hợp từ điển validationAttributes
bạn với bất kỳ thuộc tính html khác thông qua vào helper tùy chỉnh của bạn và bạn qua đó cùng với DropDownListFor
Các mã hoàn chỉnh mà tôi đang sử dụng (tôi có một nhãn trong đó quá, bạn có thể cảm thấy tự do để de-couple):
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));
}
Thêm hộp kiểm vào đó, tôi có hộp kiểm bắt buộc không được chiếu sáng cao làm trường lỗi khi không được chọn. – JBeckton
Không thực sự là một câu trả lời, nhiều hơn một workaround, nhưng có bạn đã thử bằng cách sử dụng giao diện IValidatableObject - có thể giúp bạn ra ngoài bây giờ? – RichardW1001
Tôi đã sử dụng IValidatableObject để xác thực phía máy chủ. Đây là một vấn đề phía khách hàng. Tôi đã tìm thấy một vấn đề mở tại codeplex cho http://aspnet.codeplex.com/workitem/7629 – JBeckton