2014-09-26 3 views
0

Я работаю над приложением ASP.NET MVC 4. Это приложение имеет контроллер с действием, которое выглядит следующим образом:ASP.NET MVC Action Not Getting Parameter Values ​​

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 }; 
    } 
    } 
}); 

Этот код успешно достигает действия контроллера. Однако, когда я смотрю на id и filter в окне просмотра, я вижу следующие ошибки:

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

Что я делаю неправильно? Как я могу вызвать действие MVC из своего JavaScript?

Спасибо!

+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 
    }; 
})() 

Однако эти ошибки также подразумевают вторую проблему, вероятно, связано с тем не менее вы пытаетесь отлаживать это:

Название «Идентификатор» не существует в текущем контексте

Названия «фильтр» не существует в текущем контексте

Даже если значения не были приняты, id и filter еще существуют в рамках действия метода. Они могут быть null или пустые строки, но существуют переменные. Неясно, где вы видите эту ошибку, но это определенно не входит в сферу действия метода действия.