ASP.NET MVC操作无法获取参数值

时间:2014-09-26 12:22:17

标签: javascript asp.net-mvc asp.net-mvc-4

我正在开发一个ASP.NET MVC 4应用程序。这个应用程序有一个控制器,其动作如下所示:

public class MyController : System.Web.Http.ApiController
{
  [ResponseType(typeof(IEnumerable<MyItem>))]
  public IHttpActionResult Get(string id, string filter)
  {
    IEnumerable<MyItem> results = MyItem.GetAll();
    List<MyItem> temp = results.ToList<MyItem>();

    var filtered = temp.Where(r => r.Name.Contains(filter);
    return Ok(filtered);
  }
}

我使用以下JavaScript调用此操作,该JavaScript依赖于Select2库:

$('#mySelect').select2({
  placeholder: 'Search here',
  minimumInputLength: 2,
  ajax: {
    url: '/api/my',
    dataType: 'json',
    quietMillis: 150,
    data: function (term, page) {
      return {
        id: '123',
        filter: term
      };
    },
    results: function (data, page) {
      return { results: data };
    }
  }
});

此代码成功到达控制器操作。但是,当我在观察窗口中查看idfilter时,会看到以下错误:

The name 'id' does not exist in the current context 
The name 'filter' does not exist in the current context 

我做错了什么?如何从我的JavaScript调用MVC操作?

谢谢!

1 个答案:

答案 0 :(得分:1)

你没有传递实际数据作为参数,你传递了一个函数:

data: function (term, page) {
  return {
    id: '123',
    filter: term
  };
}

除非调用该函数,否则将永远不会评估结果。通常人们只会自己传递数据:

data: {
  id: '123',
  filter: term
}

但是,如果在您的代码中有一个特殊原因(示例中未显示)使用函数,您将要评估该函数,以便将结果值设置为data

data: (function (term, page) {
  return {
    id: '123',
    filter: term
  };
})()

然而,这些错误也意味着第二个问题,可能与您尝试调试此问题有关:

  

名称&#39; id&#39;在当前上下文中不存在

     

名称&#39;过滤器&#39;在当前上下文中不存在

即使没有传递任何值,idfilter仍然存在在action方法的范围内。它们可能是null或空字符串,但存在变量。目前尚不清楚您在哪里看到该错误,但它绝对不在行动方法的范围内。