Asp.net mvc 4 自定义控件上的DataAnnotations属性

Asp.net mvc 4 自定义控件上的DataAnnotations属性,asp.net-mvc-4,Asp.net Mvc 4,我使用了一个自定义控件HTML助手来构建一个自动完成控制器。 它工作得很好,唯一的问题是验证问题。 在客户端,当jquery.validation.js不在图片中时,验证工作正常,对于空文本框,它会给出错误消息。 如果用户从自动完成中选择了一些内容,那么我很好。 但是当用户输入只是垃圾时,HttpPost需要处理垃圾并向用户返回错误消息。 怎么做 另外,我还看到了一个名为Remote的DataAnnotation,它可以在客户端管理验证,这样更好吗?如果是,如何在自定义控件上添加数据注释?? 多

我使用了一个自定义控件HTML助手来构建一个自动完成控制器。 它工作得很好,唯一的问题是验证问题。 在客户端,当jquery.validation.js不在图片中时,验证工作正常,对于空文本框,它会给出错误消息。 如果用户从自动完成中选择了一些内容,那么我很好。 但是当用户输入只是垃圾时,HttpPost需要处理垃圾并向用户返回错误消息。 怎么做

另外,我还看到了一个名为Remote的DataAnnotation,它可以在客户端管理验证,这样更好吗?如果是,如何在自定义控件上添加数据注释?? 多谢主席:

这是我的密码: Index.cshtml

@using (Html.BeginForm("Index", "Create"))
                {
                    @Html.AutocompleteFor(Url.Action("AutoCompleteServiceProviders", "Create"), true, "ex. Shower", c => c.service_id, a => a.name)
                    <input type="submit" id="search" value="" />
                }
自动完成

private static MvcHtmlString CreateAutocomplete<TModel>(this HtmlHelper<TModel> helper, string actionUrl, bool? isRequired, string placeholder, params Expression<Func<TModel, object>>[] expression)
    {
        var builder = new StringBuilder();

        foreach (var item in expression)
        {
            var attributes = new Dictionary<string, object>
                             {
                                 { "data-autocomplete", true },
                                 { "data-action", actionUrl }
                             };

            if (!string.IsNullOrWhiteSpace(placeholder))
            {
                attributes.Add("placeholder", placeholder);
            }

            if (isRequired.HasValue && isRequired.Value)
            {
                attributes.Add("required", "required");
            }

            Func<TModel, object> method = item.Compile();
            var value = (Object)null;
            if ((TModel)helper.ViewData.Model != null)
            {
                value = method((TModel)helper.ViewData.Model);
            }

            var baseProperty = (string)null;
            var hidden = (MvcHtmlString)null;
            if (item.Body is MemberExpression)
            {
                baseProperty = ((MemberExpression)item.Body).Member.Name;
                hidden = helper.Hidden(baseProperty, value);
                attributes.Add("data-value-name", baseProperty);
            }
            else
            {
                var op = ((UnaryExpression)item.Body).Operand;
                baseProperty = ((MemberExpression)op).Member.Name;
                hidden = helper.Hidden(baseProperty, value);
            }

            attributes.Add("data-value-id", "service_id");

            var automcompleteName = baseProperty + "_autocomplete";
            var textBox = (MvcHtmlString)null;
            if (value != null)
            {
                textBox = helper.TextBox(automcompleteName, value, string.Empty, attributes);
            }
            else
            {
                textBox = helper.TextBox(automcompleteName, null, string.Empty, attributes);
            }

            builder.AppendLine(hidden.ToHtmlString());
            if (baseProperty == "name")
            {
                builder.AppendLine(textBox.ToHtmlString());
            }
        }

        return new MvcHtmlString(builder.ToString());
    }

您可以从这里获得验证:

var validation = htmlHelper.ValidationMessageFor(expression, null, new Dictionary<string, object>());
更新:


我使用TagBuilder创建标记。我使用tagbuilder所做的是将验证添加到span或div标记中,并在需要时让不引人注目的javascript隐藏/显示它。它返回一个MVCHtmlString,您只需将它附加到要在其中显示它的元素上即可

抱歉,Robert,我没有得到它。我已经将行添加到构建器中,但是我在哪里/如何编写消息,以及如何在客户端显示消息?