我正在开发一个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 };
}
}
});
此代码成功到达控制器操作。但是,当我在观察窗口中查看id
和filter
时,会看到以下错误:
The name 'id' does not exist in the current context
The name 'filter' does not exist in the current context
我做错了什么?如何从我的JavaScript调用MVC操作?
谢谢!
答案 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;在当前上下文中不存在
即使没有传递任何值,id
和filter
仍然存在在action方法的范围内。它们可能是null
或空字符串,但存在变量。目前尚不清楚您在哪里看到该错误,但它绝对不在行动方法的范围内。