4

我无法找到一种方法来轻松读取 KendoUI AutoComplete 小部件发送的 ajax 发布值。

文档缺少有关此任务的任何详细信息。事实上,我能找到的服务器端代码示例如下:

namespace Kendo.Mvc.Examples.Controllers
{
    using System.Web.Mvc;

    public partial class AutoCompleteController : Controller
    {
        public ActionResult ServerFiltering()
        {
            return View();
        }
   }
}

我期待传入的数据自动绑定到 aKendo.Mvc.UI.DataSourceRequest但这并没有发生......

如果您有效地处理了 KendoUI AutoComplete 小部件,请分享您的经验,TIA!

4

2 回答 2

5

@David Perlman,我正在完全编辑这个答案,因为我现在更好地理解了你的问题。在他们使用 OData 的Kendo示例中,Server Filtering它具有开箱即用的服务器过滤,这是我自己不知道的。如果您像我一样使用 MVC 控制器,则必须修改示例并使用参数映射,就像我将在新代码示例中使用的那样。在我的示例中,我使用了一个简单的“站点”表,Entity Framework并且我有一个直接连接到站点表的视图。我有一个名为 Lookups.cs 的类,我返回一个动态模型 GetSitesStartsWith(string startsWith) 像这样:

  public dynamic GetSitesStartsWith(string startsWith)
    {
        return _context.vAaiomsSites
            .Select(s => new
            {
                ID = s.ID,
                SiteName = s.SiteName
            }).OrderBy(s => s.SiteName).Where(s => s.SiteName.StartsWith(startsWith));
    }

因此,在我的申请控制器中,我创建了一个 JsonResult,如下所示:

  public JsonResult GetSitesStartsWith(string startsWith)
    {

        var lookups = new Lookups();
        var data = lookups.GetSitesStartsWith(startsWith);
        return Json(data, JsonRequestBehavior.AllowGet);
    }

最后要做的是将自动完成代码添加到连接到此 JsonResult 而不是 OData 的视图中,如下所示:

<div id="example" class="k-content">
        <div class="demo-section">
            <h2>Sites</h2>
            <input id="sites" style="width: 250px" />
        </div>
        <script>
            $(document).ready(function() {
                $("#sites").kendoAutoComplete({
                    placeholder: "Enter site ...",
                    dataTextField: "SiteName",
                    filter: "startswith",
                    minLength: 3,
                    dataSource: {
                        type: "json",
                        serverFiltering: true,
                        serverPaging: true,
                        pageSize: 20,
                        transport: {
                            read:
                                {
                                    url: "Requisitions/GetSitesStartsWith"
                                }, //read
                            parameterMap: function() {// send value of autocomplete as the "startsWith" parameter
                                        return { 
                                               startsWith:$("#sites").data("kendoAutoComplete").value()
                                        };
                            }
                        } //transport
                    } //datasource
                }); //kendoAutoComplete
            }); //DocumentReady
        </script>
</div> 

我有这个示例工作,它在服务器上进行过滤,并使用开发人员工具进行了验证。如果您需要更多帮助,请告诉我。

于 2013-08-05T16:12:05.013 回答
0

这里有一篇优秀的文章描述了如何在 MVC 中使用 Keno Autocomplete 。

如果您决定实现所描述的代码,请务必非常仔细地遵循它。任何和每一个差异都可能会破坏剑道。

于 2014-02-17T20:26:05.637 回答