1

我通过在控制器中使用以下方法将这个剑道 ui 自动完成小部件用于文本框:

public ActionResult GetItems(string term)
{
    ContextObject contextObject = new ContextObject();
    TransactionHistory transactionhistory = new TransactionHistory();
    var items = transactionhistory.GetItems(contextObject, term);
    // the above method will gives list of strings
    return Json(items, JsonRequestBehavior.AllowGet);                     
}

这是我的观点:

@(Html.Kendo().AutoComplete()
      .Name("ItemSearch")
      .DataTextField("RPersonDetails")
      .DataSource(source => {
          source.Read(read =>
          {
              read.Action("GetItems", "TransactionHistoryResults")
                  .Data("onAdditionalData");
          })
          .ServerFiltering(true);              
      })
      .HtmlAttributes(new { style = "width:100px" })
)

<script type="text/javascript">
   function onAdditionalData() {
        return {
            text: $("#ItemSearch").val()
        };
    }
</script> 

在链接中,我们有datatextfield用于指定自动完成要使用的 Product(table) 的哪个属性,在我的场景中,此方法transactionhistory.GetItems(contextObject, term);提供字符串列表,因此在这种情况下,我需要在此字段DataTextField("RPersonDetails")中提及的地方RPersonDetails

我需要更改 GetItems 方法吗?请对此提出任何建议和想法......非常感谢提前......

4

3 回答 3

1

对于服务器过滤,请参阅以下内容:

public JsonResult MyProducts(string text)
{
    List<string> myStrings = new List<string>();
    myStrings.Add("Aa");
    myStrings.Add("ACB");
    myStrings.Add("cc");

    System.Text.RegularExpressions.Regex regEx = new System.Text.RegularExpressions.Regex(text, RegexOptions.IgnoreCase);
    var results = myStrings
        .Where<string>(item => regEx.IsMatch(item))
        .ToList<string>();

    return Json(results, JsonRequestBehavior.AllowGet);
}

用户界面:

@(Html.Kendo().AutoComplete()
    .Name("productAutoComplete")
    .DataSource(source =>
    {
        source.Read(read =>
        {
            read.Action("MyProducts", "Sample")
                .Data("onAdditionalData");
        })
        .ServerFiltering(true); //If true the DataSource will not filter the data on the client.
    }
    )
    .Events(e => e
        .Select("autocomplete_select")
        .Change("autocomplete_change")
    )
)

脚本:

function onAdditionalData() {
    return {
        text: $("#productAutoComplete").val()
    };
}
于 2013-08-29T05:58:32.137 回答
1

这是用于 kendo ui 自动完成和检索控制器中选定值的完整工作示例。它hidden field用于设置选定的值。

控制器

public class SampleController : Controller
    {


        public ActionResult Index()
        {
            return View();
        }

        public JsonResult MyProducts()
        {
            List<string> myStrings = new List<string>();
            myStrings.Add("AA");
            myStrings.Add("AB");
            return Json(myStrings, JsonRequestBehavior.AllowGet);
        }

        [HttpPost]
        public ActionResult PostValues(sampleModel model)
        {

            string temp = model.SelectedItem;
            return View("Index");

        }

    }

模型

public class sampleModel
    {
        public string SelectedItem { get; set; }
    }

看法

@model  MyNamespace.sampleModel

@Scripts.Render("~/bundles/jquery")
@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

@using( @Html.BeginForm("PostValues","Sample" ))
{
@Html.HiddenFor(model => model.SelectedItem)


@(Html.Kendo().AutoComplete()
      .Name("productAutoComplete")
      .DataSource(source =>
      {
              source.Read(read =>
             {
                 read.Action("MyProducts", "Sample")
                          .Data("onAdditionalData");
             });
      }
      )
      .Events(e => e
        .Select("autocomplete_select")
        .Change("autocomplete_change")
    )

)

<input id="Button1" type="submit" value="PostValues" />
}
<script>
    function onAdditionalData() {
        return {
            text: $("#productAutoComplete").val()
        };
    }

    function autocomplete_select()
    {

    }

    function autocomplete_change() {
        $('#SelectedItem').val($("#productAutoComplete").val());
        alert($('#SelectedItem').val());
    }


</script>
于 2013-08-28T15:51:48.730 回答
0

DataTextField方法用于指定列表中对象的属性。如果您的结果集只是一个字符串列表,那么您可能不需要指定 DataTextField;尝试删除它。

于 2013-08-28T15:16:32.537 回答