2014-09-26 112 views
0

我正在開發ASP.NET MVC 4應用程序。這個程序有看起來像下面的動作控制器:ASP.NET MVC操作未獲取參數值

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動作?

謝謝!

+0

你能否也顯示你的路線?除了大衛的答案(聽起來是對的)之外,它可能就是這樣。 – 2014-09-26 12:34:47

回答

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

然而,這些錯誤也意味着第二個問題,可能與然而你要調試此:

名稱「身份證」並不在目前情況下存在

名稱「過濾器」不在當前情況下存在

即使被傳遞任何值,idfilter仍然在行動方法的範圍內存在。它們可能是null或空字符串,但存在變量。目前還不清楚你在哪裏看到這個錯誤,但它絕對不在操作方法的範圍內。