【发布时间】:2020-02-10 07:56:24
【问题描述】:
我有一个带有以下 JavaScript 的 MVC 5 视图,在调用控制器上的操作方法后出现错误:
<script type="text/javascript">
$('#ddlvendors').change(function () {
var descHtml = "";
var vendorId = $(this).val();
$.ajax(
{
type: "POST",
data: { vendorId: vendorId },
url: '@Url.Action("PurchaseOrderVendor")',
datatype: "json",
success: function (aVendorObject) {
alert(aVendorObject.Name);
},
error: function (req, status, error) {
alert(error);
}
});
});
</script>
控制器动作方法如下:
[HttpPost]
public ActionResult PurchaseOrderVendor( int vendorId)
{
Vendor aVendor=VendorServices.GetVendor(vendorId);
return Json(aVendor);
}
返回的vendor对象如下:
public class VendorViewModel
{
public int VendorId { get; set; }
public string Name { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string ZipCode { get; set; }
public string Description { get; set; }
public string ContactName { get; set; }
public string Phone { get; set; }
}
使用 Visual Studio 2017 调试器,我可以看到供应商数据已在控制器端正确填充。如果我不尝试访问任何成员数据,则 ajax 调用将完成且不会出现错误。但是,当我尝试访问作为 aVendorObject 传入的任何部分(例如 aVendorObject.Name)时,我会收到一个浏览器错误消息“内部服务器错误”。如何在 ajax 调用中修复我的成功处理程序,以便我可以访问从控制器返回的 Vendor 对象的成员?
提前致谢。
【问题讨论】:
-
在浏览器上按
F12转到network部分。然后执行ddlVendor.change()事件。您将看到失败请求的红色文本。单击它,然后导航到Response选项卡。你会在那里看到实际的错误! -
谢谢。使用 F12 揭示了这个问题。这是一个实体框架问题,它使用了延迟加载的默认行为。当我关闭延迟加载时,数据现在按预期通过。我将通过一个示例来回答这个问题,该示例说明我如何在延迟加载设置为关闭的情况下修改实体框架调用。
标签: javascript jquery asp.net-mvc asp.net-ajax