将多个参数传递给自动完成返回方法

时间:2012-07-17 21:39:15

标签: jquery asp.net-mvc-3 .net

我需要一些帮助。我在MVC3中使用razor视图。我有一个自动完成功能的搜索栏,工作正常。现在按照要求。我需要在搜索文本框旁边创建一个单选按钮,并根据所选的单选按钮值,我需要从不同的表中获取自动完成文本。这是因为,我的索引页面视图有3个不同的webgrid列表。因此,搜索应根据用户打算搜索的内容进行操作,方法是将参数中的选项指定为单选按钮。

我这里有常规的jQuery代码:

$(document).ready(function () {
    $(":input[data-autocomplete]").each(function () {
        $(this).autocomplete({ source: $(this).attr("data-autocomplete") });
    })
})*  

我修改了上面的内容以传递第二个参数: -

$(document).ready(function () {

    var radioval = $("#form0").find("input[type=radio]").attr("value");
    $(":input[data-autocomplete]").each(function (request) {
        var srctxt = $(this).attr("value");
        $(this).autocomplete({
            source: "/Facility/FindNames/?term = " + $(this).attr("value") + "&stype = " + radioval
        });
    })
})

我的目的是传递第二个参数搜索类型,它是一个单选按钮组,然后在下面的控制器中根据传递的值更改查询以从不同的表中进行选择。

- 控制器方法

 public JsonResult FindNames(string term, string stype)
    {

        string radioValue = null;

        var result = _service.GetAllFacility()
                    .Where(r => r.FacilityName.Contains(term))
                    .Take(10)
                    .Select(r => new { label = r.FacilityName });

        return Json(result, JsonRequestBehavior.AllowGet);
    }

但是stype的值总是为null。使用萤火虫我可以看到它确实有价值。有人能告诉我我的代码有什么问题吗?实现这种搜索功能的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

您可以按如下方式处理source function以传递多个参数

var radioval = $("#form0").find("input[type=radio]").attr("value");
$(":input[data-autocomplete]").each(function() {

     $this = $(this);
     var srctxt = $this.val();
     $this.autocomplete({
          source: function (request, response) {
             $.getJSON('/Facility/FindNames/',
             {
                stype: radioval,
                term: srctxt
             }, response);
          }
     });
})