我希望在发生特定操作时将控制器中的json数据发送到我的视图。
我在控制器上使用它来发送数据
[HttpGet]
public JsonResult JSONGetParking(int buildingID){
return this.Json(
new
{
Result = (from obj in db.Parkings.Where(p => p.buildingID == buildingID) select new { ID = obj.ID, Name = obj.note })
}
, JsonRequestBehavior.AllowGet
);
}
效果很好
在我的脚本上我使用了这个:
FloorScript.js
$(document).ready(function () {
$('#buildingID').change(function () {
alert("what is not");
$.getJSON('JSONGetParking?buildingID=' + $('#buildingID').val(), function (data) {
alert("afd");
var items = " ";
$.each(data, function (obx, oby) {
items += "<option value='" + oby.ID + "'>" + oby.Name + "</option>";
});
$('#parkingID').html(items);
});
});
});
我已经打开谷歌浏览器,我可以看到请求和响应,如下所示:
我可以看到我发出警告的两个文字
但是,在我的选择器上,我只看到undefined value
<div id="editor-label">
<select id="parkingID" name="parkingID"></select>
</div>
我在此
中添加了jquery@section scripts {
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/Scripts/FloorScript.js");
}
答案 0 :(得分:3)
你没有循环使用正确的变量。
你这样做了:
$.each(data, function (obx, oby) {
而你应该这样做:
$.each(data.Result, function (obx, oby) {
这在您提供的Google Chrome屏幕截图中非常明显。正如您所看到的,返回的JSON有一个名为Result
的属性,它是集合,而您循环遍历不是数组的data
变量 - 它只是一个具有名为{{的属性的javascript对象1}}这是你想要循环的数组。
我也会替换:
Result
使用:
$.getJSON('JSONGetParking?buildingID=' + $('#buildingID').val(), function (data) {
当然在那里摆脱这个硬编码的url并使用url helper生成它,在下拉列表中显示为HTML5 data- *属性:
$.getJSON('JSONGetParking', { buildingID: $('#buildingID').val() }, function (data) {
然后在更改事件中,您可以轻松地检索此URL并避免对其进行硬编码(当然,当您在虚拟目录中的IIS中部署代码时,可能会冒破坏代码的风险,或者只是更改应用程序的路由模式):
@Html.DropDownListFor(
x => x.BuildingId,
Model.Buildings,
new {
id = "buildingID",
data_url = Url.Action("JSONGetParking")
}
)
好吧,现在最初的一塌糊涂了。
答案 1 :(得分:2)
在每个循环中使用data.Result
$(document).ready(function () {
$('#buildingID').change(function () {
alert("what is not");
$.getJSON('JSONGetParking?buildingID=' + $('#buildingID').val(), function (data) {
alert("afd");
var items = " ";
$.each(data.Result, function (obx, oby) {
items += "<option value='" + oby.ID + "'>" + oby.Name + "</option>";
});
$('#parkingID').html(items);
});
});
});
希望这会有所帮助......