首先,我一直在浏览所有我发现可以处理JQuery Ajax调用此错误的帖子,但大多数是由于预期返回错误的dataTypes而引起的,而且我很确定这不是我的问题,因为此代码已起作用前。
我想要做的是,当我单击我的复选框之一时,我想使用模型检索局部视图,并将其填充到主视图的#selectedProductContainer中。
这是我正在运行的脚本的主要视图(缩短了很多时间):
@model ProductMainViewModel
<div class="product-list-wrapper">
@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() })
</div>
<div id="selectedProductContainer">
</div>
<script>
$(".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);
}
});
}
<script>
此调用的控制器操作如下所示:
[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<Accessory> Accessories { get; set; }
}
这是我的局部视图(简短版):
@model ProductFormViewModel
<div>
<span>Hello</span>
</div>
问题是从ajax调用中,我在警报框中返回“错误:内部服务器错误”以进行错误处理。我已经调试了整个通话,所有值都是正确的。控制器发回局部视图和我的视图模型时,似乎感到很惊讶。
在我的脑海中,我觉得这是由于响应的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<ProductId> ProductIds { get; set; }
}
我们在配件上所做的更改是,我们决定每个配件只需要一个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中打开Network并单击call-> Preview时,出现了asp.net错误消息,该错误消息为我提供了我需要的所有信息。就我而言,我忘记了使用更新的模型来更新发送回的局部视图。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句