ASP.NET MVC操作未获取参数值

ASP.NET MVC Action Not Getting Parameter Values

本文关键字:获取 参数 操作 NET MVC ASP      更新时间:2023-09-26

我正在开发一个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调用此操作,它依赖于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操作?

谢谢!

您不是在传递实际数据作为参数,而是在传递一个函数:

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

除非调用该函数,否则永远不会计算结果。一般来说,一个人只会自己传递数据:

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

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

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

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

名称"id"在当前上下文中不存在

名称"filter"在当前上下文中不存在

即使没有传递任何值,idfilter仍然存在于操作方法的范围内。它们可能是null或空字符串,但变量是存在的。目前还不清楚您在哪里看到了这个错误,但它肯定不在操作方法的范围内。