簡體   English   中英

500 - JQuery Ajax帖子上的內部服務器錯誤(ASP.NET MVC)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM