我想根据另一个下拉列表的选择填充一个下拉列表。
我知道这是一个相当普遍的问题,整整两天我一直在尝试网上找到的不同样本,但无济于事!
这是我的代码:
控制器:
public List<SelectListItem> listTestCases(string id)
{
IQueryable<SelectListItem> A = repository.listTestCases(id);
return (A.toList());
}
public JsonResult listTestCases_2(string id)
{
IQueryable<SelectListItem> A = repository.listTestCases(id);
return Json(A);
}
我有两个方法,其中一个返回一个List,另一个返回JSONResults,我尝试了两种方法在网上找到的所有方法。 脚本:
<script>
$(document).ready(function() {
$('select#testCategoriesUniqueId').change(function() {
var testCategory = $(this).val();
$.ajaxSetup({ cache: false });
alert(testCategory);
$.getJSON("TestInput/listTestCases/" , {id: testCategory}, function(data) {
alert("here");
});
});
});
使用上面的代码,代码遍历listTestCases,得到结果,但它不会转到success函数。 (不提醒)
我试过了:
$.getJSON("TestInput/listTestCases/" + testCategory, null, function(data) {
alert("here");
});
同样的结果并不奇怪。
我甚至尝试过:(json-p)
$.ajax({
url: "TestInput/listTestCases/" + testCategory,
dataType: "json-p",
success: function(data) {
alert(data.length);
var S = "";
$("#testCasesUniqueId").removeOption(/./);
for (var i = 0; i < data.length; i++) {
S += data[i];
var val = data[i].Value;
var text = data[i].Text;
$("#testCasesUniqueId").addOption(val, text, false);
}
alert(S);
}
}
);
,结果是一个字符串(System.collections.List [... SelectListItem]。并没有给我列表中的对象。所以我尝试使用listTestCases2,它甚至没有调用方法。< / p>
我在某处读到了我需要使用post而不是get,我甚至尝试过postJSON。没有结果。
基本上我迷失了。
答案 0 :(得分:0)
确保从网络根目录引用您的ajax调用(在网址前面加上“/”)。如上所述,您将相对引用该呼叫。我建议不要在jquery / javascript中使用双引号。另外,不要混合结果类型。假设您的控制器是TestInput,请尝试:
$.ajax({
url: '/TestInput/listTestCases_2/' + testCategory,
type: 'get',
dataType: 'json',
success: function(data) {
alert(data.length);
var S = '';
$('#testCasesUniqueId').removeOption(/./);
for (var i = 0; i < data.length; i++) {
S += data[i];
var val = data[i].Value;
var text = data[i].Text;
$('#testCasesUniqueId').addOption(val, text, false);
}
alert(S);
}
});
答案 1 :(得分:0)
尝试使用testCategory
来电的data:
设置传递参数$.ajax
:
$.ajax({
url: "TestInput/listTestCases",
data: { id: testCategory },
dataType: "json",
success: function(data) {
alert(data.length);
var S = "";
$("#testCasesUniqueId").removeOption(/./);
for (var i = 0; i < data.length; i++) {
S += data[i];
var val = data[i].Value;
var text = data[i].Text;
$("#testCasesUniqueId").addOption(val, text, false);
}
alert(S);
}
}
);
答案 2 :(得分:0)
在某处我读到我需要为我的目的使用“post”方法。
$.ajax({
url: "TestInput/listTestCases_2/" + testCategory,
dataType: "json",
type: 'post',
success: function(data) {
alert(data.length);
}
});
适合我。