[英]500 - Internal Server Error on JQuery Ajax post (ASP.NET MVC)
首先,我一直在查看我能找到的所有可以在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; }
}
我們在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
infert.js中的第113行是我的$ .ajax開始的地方。 匿名函數的第179行是我對ProductChange()函數的調用。
正如@Mackan和@gamesmad在評論中指出的那樣,我看錯了。 當我在devtools中打開網絡並單擊調用 - >預覽時,我收到了一條asp.net錯誤消息,該消息為我提供了所需的所有信息。 在我的情況下,我忘記更新我發回的部分視圖與更新的模型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.