剃须刀视图中不止一个kendo自动完成

时间:2013-01-21 07:16:06

标签: asp.net-mvc autocomplete kendo-ui partial-views

我想在部分视图中使用kendo自动完成功能,我在一个视图中有很多这样的功能 因此我必须动态获取参数,有没有什么方法可以在Data fanction中获取元素id?我$(这).val(),但它不起作用:(,我应该使用什么剂量? 请帮我 :(  tihs是我的代码:

@(Html.Kendo().AutoComplete()
.Name("Employee" + (string)Session["fileid"]) 
.Placeholder("Employee Name ...")
.Filter(FilterType.StartsWith)
.DataSource(source =>
{
    source.Read(read =>
                 {
        read.Action(
                        "GetEmployeeName",
                         "Proceeds")
                         .Data(
                      "function onAdditionalData() {return { text:$(this).val() };}");
          })
                     .ServerFiltering(true);
})
.Events(e => { e.Open("onOpen");})
.Animation(true)
)

3 个答案:

答案 0 :(得分:0)

感谢您的回复,我的视图中有许多自动完成控件,我只想写一个 read.Action(“GetCountries”,“Proceeds”)。数据(“onAdditionalData”)所有这些函数的函数我必须在此函数中获取每个所选AutoComplete控件的ID(以获取用户输入的值并将其传递给指定的操作)。代码如下:

 @(Html.Kendo().AutoComplete()
 .Name("Employee" + (string)Session["fileid"]) 
 .Placeholder("Employee Name ...")
 .Filter(FilterType.StartsWith)
 .DataSource(source =>
  {
    source.Read(read =>
                 {
         read.Action(
                    "GetEmployeeName",
                     "Proceeds")
                     .Data("onAdditionalData");
      })
         .ServerFiltering(true);
  })
  .Animation(true)
 )

function onAdditionalData() {
var id = this.element.attr('id');//This line is my problem, because it does not
//work and I can not get the ID of the currently focused AutoComplete control.
id = '#' + id;
return {    text: $(id).val() };
}

这是行动部分:

    [System.Web.Mvc.HttpGet]
    public System.Web.Mvc.JsonResult GetEmployeeName(string text)
    {
    return Json(/*SOMEVALUES*/, System.Web.Mvc.JsonRequestBehavior.AllowGet);
    }

如果我不使用.Data(“onAdditionalData”),它会将null作为参数发送到action

答案 1 :(得分:0)

这是一种对我有用的方法......

function onAdditionalData(e) {
    return { text: e.filter.filters[0].value };
}

此外,您可以更改控制器操作名称以添加字段的ID ...

read.Action("MyAction#" + id, "MyController").Data("onAdditionalData");

并以这种方式访问​​attribs,允许您设置数据参数并在事件中使用它们:

function onAdditionalData(e) {
    var filterValue = e.filter.filters[0].value;
    var field = $(this.url.substring(this.url.indexOf('#')));
    return {
        text: filterValue,
        extradata1: field.data("extradata1"),
        extradata2: field.data("extradata2")
    };
}

在GET到服务器期间,浏览器将删除URL中的哈希标记。

我使用此方法传递列表源枚举和各种其他参数,以创建一个非常灵活的AJAX接口。

答案 2 :(得分:0)

如果您只需要控件的值而不关心控件本身就可以这样做......

 function onAdditionalData(e) {
    return { text: e.filter.filters[0].value };
  }