【发布时间】:2011-12-02 19:54:08
【问题描述】:
我正在尝试根据在另一个下拉列表中选择的值填充下拉列表。我正在使用this guy's 示例,但尚未成功运行。我有一个成功的 Ajax 调用,它在父下拉列表的更改事件中触发。我已经验证了传递给 Ajax 函数的数据是正确的。但是,结果是错误(200;JSON 结果中出现意外字符)。我一直试图弄清楚如何调试 a) 在 Ajax 调用中调用的控制器操作和 b) 将结果列表提供给控制器操作的函数。谁能帮我弄清楚如何调试a)和b)? Visual Studio 2010 似乎没有为调试 Ajax 调用的目标提供很多帮助。
这是我的代码:
1) 控制器操作 (BreedController) 调用列表帮助类函数以将 JSON 对象返回给 Ajax 成功回调。
//
// Retrieve JSON object containing breeds for a given species
//
[HttpPost]
public JsonResult BreedsBySpecies(int? id)
{
ListHelper lh = new ListHelper();
return Json(new { items = lh.GetBreedsBySpecies(id) }, JsonRequestBehavior.AllowGet);
}
2) 应该返回给定物种 ID 的品种的 SelectItemList 的函数。这由控制器操作调用。
public List<SelectListItem> GetBreedsBySpecies(int? speciesID)
{
var breed = from b in db.Breeds
select b;
if (speciesID.HasValue)
{
breed = breed.Where(b => b.SpeciesID == speciesID);
}
List<SelectListItem> lst = new List<SelectListItem>();
foreach (var item in breed)
{
lst.Add(new SelectListItem { Text = item.Description, Value = item.BreedID.ToString() });
}
return lst;
}
3) 执行 Ajax 调用的 javascript 函数。我已经确认这得到了正确的值(例如,“/Breed/BreedsBySpecies”以获取正确的控制器操作,并且 formData 包含正确的物种 ID)
function selectFromAjax(url, formData, target) {
$(target).html("");
if (formData.id) {
$.ajax({
type: 'POST',
url: url,
data: formData,
dataType: 'text json',
contentType: 'application/json; charset=utf-8',
success: function (data, textStatus) {
if (data) {
$(data.items).each(function () {
$(target).append($("<option></option>").attr("value", this.Value).text(this.Text));
});
$(target).change();
}
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(thrownError);
}
});
}
else {
$(target).change();
}
}
【问题讨论】:
-
我安装了 firebug,但我不明白这将如何让我调试 VS2010 代码?我该怎么做?
-
打开网站和萤火虫。刷新网站并在 firebug 中单击控制台以查看错误。它应该向您显示错误。如果没有,请转到脚本选项卡并在那里找到您的文件和代码。您也可以在那里创建断点并调试您的 javascript。
-
这表明 Ajax 错误回调正在被触发,但它根本没有让我进入 C# 代码。据我所知,Ajax 调用按预期工作。这是我正在尝试调试的 C# 代码,但没有命中断点。
-
尝试从你的ajax调用中删除成功和失败,然后它应该会出现一个错误,当你点击它并选择html时,它会显示错误页面,就像普通的asp一样.net 错误页面。
标签: ajax asp.net-mvc-3 visual-studio-debugging