使用Kendo组合框的强类型可搜索html助手

时间:2014-08-21 04:58:28

标签: c# asp.net-mvc-4 combobox asp.net-web-api2 kendo-asp.net-mvc

我使用Kendo组合框创建了一个自定义html帮助器,并使用WebApi实现服务器端过滤,目标是为特定实体类型创建可搜索控件,

我的实体 -

public class Resources{
        public Guid Id { get; set; }

        public string DisplayName { get; set; }
}

我当前的html助手 -

public static MvcHtmlString Searchbox(this HtmlHelper helper, string Name)
    {
        UrlHelper urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);

        var combo = helper.Kendo().ComboBox();
        combo.Name(Name);
        combo.Filter(FilterType.Contains);
        combo.Suggest(true);
        combo.AutoBind(false);
        combo.DataValueField("Id");
        combo.DataTextField("DisplayName");
        combo.Enable(Enabled);
        combo.MinLength(1);

        combo.DataSource(source => source
            .Read(read => read.Url(urlHelper.HttpRouteUrl("SearchRoute")))
            .ServerFiltering(true)
        );

        return MvcHtmlString.Create(combo.ToHtmlString());
    }

我需要强力输入,即。创建一个SearchBoxFor(...)帮助器。这是我尝试过的 -

public static MvcHtmlString SearchboxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,
            Expression<Func<TModel, TProperty>> expression)
        {
            UrlHelper urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
            var name = ExpressionHelper.GetExpressionText(expression);

            var expressionResult = expression.Compile();
            var value = expressionResult(htmlHelper.ViewData.Model);

            var combo = htmlHelper.Kendo().ComboBox();
            combo.Name(name);
            combo.Filter(FilterType.Contains);
            combo.Suggest(true);
            combo.AutoBind(false);
            combo.DataValueField("Id");
            combo.DataTextField("DisplayName");
            combo.Enable(Enabled);
            combo.MinLength(1);

            combo.Value((value as Resources).DisplayName);

            combo.DataSource(source => source
                .Read(read => read.Url(urlHelper.HttpRouteUrl("SearchRoute")))
                .ServerFiltering(true)
            );

            return MvcHtmlString.Create(combo.ToHtmlString());
}

问题是组合框的项目在用户实际开始输入某些字符之前没有填充,所以当页面加载时,模型的属性值无法预先填充,所以我不知道如何实现这个

我尝试将组合的值设置为模型属性的DisplayName属性,但即使显示文本,它也不是有效的资源实体。

我希望所有这些都有意义

0 个答案:

没有答案