我使用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属性,但即使显示文本,它也不是有效的资源实体。
我希望所有这些都有意义