500 - Internal Server Error auf JQuery Ajax post (ASP.NET MVC)

First off, ich habe auf der Suche durch alle Beiträge die ich finden konnte, die Griffe dieser Fehler auf JQuery-Ajax-calls, aber die meisten von Ihnen wegen falschen Datentypen zurück erwartet, und ich bin mir ziemlich sicher, dass ist nicht mein problem, da dieser code vorher funktioniert hat.

Was ich versuche zu tun ist, wenn ich auf einer meiner Checkboxen, die ich abrufen möchten eine Teilansicht mit der ein Modell und füllen Sie es in #selectedProductContainer auf meinem Haupt-Ansicht.

Dies ist meine Hauptansicht (Verkürzt ganz ein bisschen) mit den Skripten, die ausgeführt wird:

@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>

Die controller-Aktion, die für diesen Aufruf sieht wie folgt aus:

[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);

Hier ist der erste meiner Sicht Vorbild für meine Teilansicht:

public class ProductFormViewModel
{
    public Product Product { get; set; }
    public List<Accessory> Accessories { get; set; }
}

Und hier ist meine eingeschränkte Sicht (Kurze version):

@model ProductFormViewModel

<div>
    <span>Hello</span>
</div>

Das Problem ist, dass aus der ajax-Aufruf bekomme ich wieder die Fehlermeldung "Fehler: Internal Server Error" in meinem alert-box für die Fehlerbehandlung.
Ich habe gedebuggt durch das gesamte Aufruf und alle meine Werte korrekt sind. Es scheint, freak out, wenn der controller sendet die eingeschränkte Sicht und meine Ansicht Modell.

In der Rückseite meines Geistes ich fühle mich wie das ist wegen der falschen Datentyp als Antwort, aber ich erwarte, html zurück, und das ist, was ich bekommen sollte, richtig?
Das funktionierte früher, aber wir mussten einige kleine änderungen vorgenommen, um die Zubehör-Modell, und ich bin mir bewusst, dass das problem verbunden sein sollte, dies zu ändern, aber ich kann nicht scheinen zu finden, die Verbindung.
Ich werde nach meinem Unterricht hier zu, wenn Sie gebraucht würden:

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; }
}

Die Veränderung, die wir vorgenommen-Accessoire war, dass wir beschlossen, dass wir nur einen ProductId-pro-Zubehör, früher haben wir das virtual ICollection zum speichern mehrerer IDS. Die Klasse sah so aus:

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; }
}

Wir sind nicht mit dieser jetzt überhaupt, aber stattdessen verwendet die regelmäßigen int ProductId.

Irgendwelche Ideen, an was könnte schief gegangen sein?

EDIT: ich hinzufüge, meine browser-devtools Fehlermeldung:

POST http://localhost:54213/Home/ProductCalcSelection 500 (Internal Server Error)
senden @ jquery-2.1.3.js:8625
jQuery.verlängern.ajax @ jquery-2.1.3.js:8161
ProductChange @ offert.js:113
(anonyme Funktion) @ Offert:179
jQuery.event.Versand @ jquery-2.1.3.js:4430
elemData.handle @ jquery-2.1.3.js:4116

Linie 113 in offert.js ist, wo meine $.ajax beginnt.
Zeile 179 für die anonyme Funktion ist mein Aufruf ProductChange () - Funktion.

Änderung Wert: element.Wert: element.Wert.
Dies ist der Fehler auf dem server. Debuggen Sie die Anfrage unter Verwendung von Entwickler-tools.
Das problem ist mit der ProductCalcSelection Funktion. Setzen Sie einen breakpoint auf den Anfang und schauen, was 'Wert' ist festgelegt durch den AJAX-call. Dann lassen Sie es laufen, und es wird brechen, wo der tatsächliche Fehler ist. Was ist der Fehler?
Entfernen contentType und Datentyp und sehen, was passiert.
Warum sind Sie senden der parameter als JSON, wenn es nur ein integer Wert?

InformationsquelleAutor Martin Johansson | 2015-04-21

Schreibe einen Kommentar