500 – JQuery Ajaxpost上的内部服务器错误(ASP.NET MVC)
首先,我一直在查看我能找到的所有可以在JQuery Ajax调用上处理此错误的post,但是大部分都是由于错误的dataTypes预期回来了,我很确定这不是我的问题,因为这段代码已经工作了之前。
我要做的是当我单击其中一个复选框时,我想要检索带有模型的局部视图,并在我的主视图中的#selectedProductContainer中填充它。
这是我正在运行的脚本的主要观点(缩短了很多):
@model ProductMainViewModel @Html.CheckBoxListFor(m => m.PostedProducts.ProductIds, m => m.AvalibleProducts, entity => entity.Id, entity => entity.Name, m => m.SelectedProducts, m => new { @class = "productCheckboxList productSelected" + m.Id, data_price = m.Price.ToString() }) $(".productCheckboxList[type='checkbox']").change(function () { var isChecked = $(this).is(":checked"); var value = $(this).val(); if (isChecked) { ProductChange(this); } function ProductChange(element) { var value = { Value: element.value } var container = $("#selectedProductContainer"); $.ajax({ url: "@Url.Action("ProductCalcSelection", "Home")", type: "POST", data: JSON.stringify(value), contentType: "application/json", dataType: "html", success: function(data) { container.append(data); }, error: function(jqXHR, textStatus, errorThrown) { alert("error: " + errorThrown); } }); }
此调用的控制器操作如下所示:
[HttpPost] public ActionResult ProductCalcSelection(string value) { var convertValue = Convert.ToInt32(value); var product = db.Products.FirstOrDefault(p => p.Id == convertValue); var accessories = db.Accessories.ToList(); var productViewModel = new ProductFormViewModel { Product = product, Accessories = accessories }; return PartialView("_ProductForm", productViewModel);
这是我的局部视图的第一个我的View模型:
public class ProductFormViewModel { public Product Product { get; set; } public List Accessories { get; set; } }
这是我的部分观点(简短版):
@model ProductFormViewModel Hello
问题是从ajax调用我在error handling的警报框中找回“错误:内部服务器错误”。 我通过整个调用进行了调试,我的所有值都是正确的。 当控制器发回部分视图和我的视图模型时,它似乎吓坏了。
在我的脑海里,我觉得这是由于错误的dataType作为响应,但我希望html回来,这就是我应该得到的,对吧? 这工作较早,但我们不得不对Accessory模型进行一些小的更改,我知道问题应该与这个更改相关联,但我似乎无法找到连接。 如果需要,我也会在这里发布我的课程:
public class Product : IProduct { [Key] public int Id { get; set; } public string Name { get; set; } public long Price { get; set; } public bool HasAccessories { get; set; } } public class Accessory : IAccessory { [Key] public int Id { get; set; } public string Name { get; set; } public string CodeName { get; set; } public string AccessoryType { get; set; } public long Price { get; set; } public bool IsMultiplied { get; set; } public int ProductId { get; set; } //public virtual ICollection ProductIds { get; set; } }
我们对Accessory所做的更改是我们决定每个附件只需要一个ProductId,之前我们使用虚拟ICollection来存储多个Id。 那堂课看起来像这样:
public class ProductId { [Key] public int Id { get; set; } public int ProductIdHolder { get; set; } [ForeignKey("Accessory")] public int AccessoryId { get; set; } public virtual Accessory Accessory { get; set; } }
我们现在根本没有使用它,而是使用常规的int ProductId。
什么可能出错的想法?
编辑:我正在添加我的浏览器devtools错误消息:
POST http:// localhost:54213 / Home / ProductCalcSelection 500(内部服务器错误)发送@jquery-2.1.3.js:8625 jQuery.extend.ajax @jquery-2.1.3.js:8161 ProductChange @ offert.js: 113(匿名函数)@Offert:179 jQuery.event.dispatch @jquery-2.1.3.js:4430 elemData.handle @jquery-2.1.3.js:4116
offert.js中的第113行是我的$ .ajax开始的地方。 匿名函数的第179行是我对ProductChange()函数的调用。
正如@Mackan和@gamesmad在评论中指出的那样,我看错了。 当我在devtools中打开网络并单击调用 – >预览时,我收到了一条asp.net错误消息,它给了我所需的所有信息。 在我的情况下,我忘记更新我发回的部分视图与更新的模型。