【问题标题】:How to validate custom ASP.NET MVC helper如何验证自定义 ASP.NET MVC 帮助程序
【发布时间】:2014-02-02 22:56:33
【问题描述】:

我需要对自定义 ASP.NET MVC 帮助程序进行有效验证。

助手

public static class AutocompleteHelper
{
    public static MvcHtmlString AutocompleteFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, string actionUrl)
    {
        return CreateAutocomplete(helper, expression, actionUrl, null, null);
    }
    public static MvcHtmlString AutocompleteFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, string actionUrl, bool? isRequired, string placeholder)
    {

        return CreateAutocomplete(helper, expression, actionUrl, placeholder, isRequired);
    }

    private static MvcHtmlString CreateAutocomplete<TModel, TValue>(HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, string actionUrl, string placeholder, bool? isRequired)
    {
        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");
        }

        attributes.Add("class", "form-control formControlAutocomplete");


        attributes.Add("maxlength", "45");


        Func<TModel, TValue> method = expression.Compile();
        var value = method((TModel)helper.ViewData.Model);
        var baseProperty = ((MemberExpression)expression.Body).Member.Name;
        var hidden = helper.Hidden(baseProperty, value);

        attributes.Add("data-value-name", baseProperty);

        var automcompleteName = baseProperty + "_autocomplete";
        var textBox = helper.TextBox(automcompleteName, null, string.Empty, attributes);

        var builder = new StringBuilder();
        builder.AppendLine(hidden.ToHtmlString());
        builder.AppendLine(textBox.ToHtmlString());

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

HTML

@Html.AutocompleteFor(x => x.ProductUID, Url.Action("AutocompleteProducts", "Requisition"), true, "Start typing Product name...")
@Html.ValidationMessageFor(x => x.ProductUID)

我似乎正在验证,但没有出现任何消​​息。

有什么线索吗?

【问题讨论】:

    标签: c# asp.net-mvc validation helper


    【解决方案1】:

    您的文本字段的名称是ProductUID_autocomplete,但您应该显示错误消息的ValidationMessageFor 绑定到ProductUID。

    因此,请确保您将错误消息绑定到相同的属性:

    @Html.ValidationMessage("ProductUID_autocomplete")
    

    看来,您可能需要验证此字段的任何自定义逻辑都会在ModelState 中的ProductUID_autocomplete 键下注入错误。

    话虽如此,为什么不直接在自定义助手中调用 ValidationMessage 助手呢?这样,您可以在视图中输入更少的内容,并且那些名称以 _autocomplete 为后缀的 逻辑 将仅保留在帮助程序中。

    【讨论】:

    • 非常感谢达林!你总是帮忙!上帝保佑你,伙计!
    猜你喜欢
    • 2016-11-15
    • 1970-01-01
    • 2014-06-04
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多