【发布时间】:2017-07-13 10:28:17
【问题描述】:
在这里,我尝试根据国家/地区下拉列表的变化从状态表中获取数据。我收到内部服务器错误。 id 被传递给控制器方法,但数据没有返回。 这是我的代码: 查看代码:
<div class="form-row">
<div class="col-md-3">Country:</div>
<div class="col-md-9">
@Html.DropDownListFor(model => model.CountryId, new SelectList(Model.Country, "Id", "Name"), "-- Select Country --", new { @class = "validate[required,maxSize[100]] select select2insidemodal",@id="country", @onchange = "FillState()" })
</div>
</div>
<div class="form-row">
<div class="col-md-3">State:</div>
<div class="col-md-9">
@Html.DropDownListFor(m => m.State,
new SelectList(Enumerable.Empty<SelectListItem>(), "StateId", "Name"),
"Select State",
new { @class = "form-control" })
</div>
</div>
脚本代码:
function FillState() {
var countryId = $('#country').val();
console.log(countryId);
$.ajax({
url: '/PM/Company/FillState'+'/'+countryId,
method: "GET",
//dataType: "JSON",
success: function (states) {
console.log(states);
$("#State").html(""); // clear before appending new list
$.each(states, function (i, state) {
$("#State").append(
$('<option></option>').val(state.StateId).html(state.Name));
});
}
});
}
控制器方法填充状态
public ActionResult FillState(int id)
{
var states = _stateService.GetStates(id);
return Json(states,JsonRequestBehavior.AllowGet);
}
状态服务正在返回值,但返回的 Json 没有返回任何东西,我在控制台上收到内部服务器错误。 当我在 xhr 中看到 ajax 请求时,当我打开该请求详细信息时,它会显示以下错误: “/”应用程序中的服务器错误。
序列化类型对象时检测到循环引用 'System.Data.Entity.DynamicProxies.State_6630E5941FBD9204A46907DE2F85C16BCADAC553D22FB81D0F45AD891174D200'。
请在这方面帮助我;
【问题讨论】:
-
试试这个:$("#State").append(""); });
-
您的对象层次结构中似乎存在循环引用,JSON 序列化程序不支持。你需要所有的列吗?您可以只选择视图中需要的属性: return Json(new { PropertyINeed1 = data.PropertyINeed1, PropertyINeed2 = data.PropertyINeed2 });这将使您的 JSON 对象更轻巧且更易于理解。如果你有很多属性,可以使用 AutoMapper 自动映射 DTO 对象和 View 对象。
-
你能告诉我上面的data.property吗?我正在使用自动映射器,并且已映射州和国家/地区
-
检查下面的答案
-
返回一组匿名对象,其中仅包含您需要的 2 个属性(用于选项值和显示文本)
标签: jquery asp.net ajax asp.net-mvc