したがって、1つのドロップダウンリストを変更すると、2番目のリストにデータを入力しようとしています。
私はこのクライアント側の機能を持っています:
$('#ProjectReference').change(function() {
var url = "@Url.Action("GetProjectIterations", "Rally")";
var data = { selectedProject: $('#ProjectReference').val() };
$.getJSON(url, data, function(iterations) {
alert("hello?");
var items;
$.each(iterations, function(i, iteration) {
items += "<option value='" + iteration.Name + "'>" + iteration.Name + "</option>";
});
}
);
$.ajax({
url: url,
type: 'GET',
dataType: 'json',
data: data,
contentType: 'application/json; charset=utf-8',
success: function (iterations) {
alert("hello?");
var items;
$.each(iterations, function(i, iteration) {
items += "<option value='" + iteration.Name + "'>" + iteration.Name + "</option>";
});
$("#ProjectIteration").html(items);},
failure: function () { alert("nope");}
});
});
コントローラーを呼び出すために2つの異なる形式を試しました(したがって、両方が必要ないことはわかっています。試したことを強調するために両方を含めました)。
コントローラが呼び出され、データが返されますが、アラートは発生しません(更新しようとしているドロップダウンリストには何も起こりません)。では、データを返す方法が正しくないのではないでしょうか。私の選択リストの数は33であるため、返される前にデータが含まれているように見えます。
public ActionResult GetProjectIterations(string selectedProject)
{
var projectIterations = cache.Get("ProjectIterations") as Hashtable;
var iterations = (projectIterations[selectedProject] as ArrayList).Cast<DynamicJsonObject>().ToList();
var selectList = iterations.Select(
iteration => new SelectListItem {Text = iteration["Name"], Value = iteration["Name"]});
return Json(selectList);
}