Mar*_*son 3 ajax asp.net-mvc jquery
首先,我一直在查看我能找到的所有可以在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>
Run Code Online (Sandbox Code Playgroud)
此调用的控制器操作如下所示:
[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);
Run Code Online (Sandbox Code Playgroud)
这是我的局部视图的第一个我的View模型:
public class ProductFormViewModel
{
public Product Product { get; set; }
public List<Accessory> Accessories { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是我的部分观点(简短版):
@model ProductFormViewModel
<div>
<span>Hello</span>
</div>
Run Code Online (Sandbox Code Playgroud)
问题是,从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; }
}
Run Code Online (Sandbox Code Playgroud)
我们在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; }
}
Run Code Online (Sandbox Code Playgroud)
我们现在根本没有使用它,而是使用常规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
infert.js中的第113行是我的$ .ajax开始的地方.匿名函数的第179行是我对ProductChange()函数的调用.
Mar*_*son 10
正如@Mackan和@gamesmad在评论中指出的那样,我看错了.当我在devtools中打开网络并单击调用 - >预览时,我收到了一条asp.net错误消息,该消息为我提供了所需的所有信息.在我的情况下,我忘记更新我发回的部分视图与更新的模型.
| 归档时间: |
|
| 查看次数: |
14363 次 |
| 最近记录: |