2017-05-03 1 views
0

Ich versuche, Daten an den Controller für die weitere Verarbeitung übergeben, aber ich bekomme Null in Controller, aber Debug von js (Ajax) zeigt die Nummer trotzdem. Was könnte das Problem sein?Pass Daten von AJAX zu Controller in MVC

Ajax:

$('.toggler_btn').on('click', function (event) 
      { 
       var id = $(this).attr('data-id'); 
        if ($(this).text() === '+') { 
         $.ajax({ 
          url: "/List/GetSubItems", 
          type: "POST", 
          contentType: "html", 
          dataType: "text", 
          data: '{"id":"' + id + '"}', // here it show the data, like 5 or some other number 
          success: function (data) 
          { 
           $('.element_wrapper [data-id="' + id + '"]').html(data); 
          } 
          }) 
         $(this).html('-'); 
        } 
        else $(this).html('+'); 
      }); 

Controller:

[HttpPost] 
    public ActionResult GetSubItems(string id) // here I get null 
    { 
     int pID = 0; 
     int.TryParse(id, out pID); 
     List<H_Table> list = new List<H_Table>(); 

     foreach (var item in db_connection.H_Table.Where(i => i.PARENT_ID == pID)) 
     { 
      list.Add(item); 
     } 
     return PartialView(list); 
    } 
+0

löschen 'content: "html",' und verwenden nur 'data: {id: id}' –

+0

contentType: Datentyp, der an den Server gesendet wird, wo als Datentyp Datentyp der Daten von Server –

Antwort

2
$('.toggler_btn').on('click', function (event) { 
    var id = $(this).attr('data-id'); 
    if ($(this).text() === '+') { 
     $.ajax({ 
      url: '/List/GetSubItems', 
      type: 'POST', 
      dataType: 'json', 
      data: '{"id":"' + id + '"}', 
      contentType: 'application/json; charset=utf-8', 
      success: function (data) { 
       $('.element_wrapper [data-id="' + id + '"]').html(data); 
      }, 
      error: function (XMLHttpRequest, textStatus, errorThrown) { 
       alert("responseText=" + XMLHttpRequest.responseText + "\n textStatus=" + textStatus + "\n errorThrown=" + errorThrown); 
      } 
     }); 
     $(this).html('-'); 
    } 
    else $(this).html('+'); 
}); 

verwenden ein kopieren Sie einfach und fügen Sie ihn

+0

Dies wird einen '500 Internal Server Error' werfen - die Methode gibt html, nicht json zurück. –

+0

@StephenMuecke erhalten Sie den Wert von 'ID' in Controller? können Sie mir bitte sagen, was Sie exacatly tun wollen –

+0

Es muss sein 'dataType:" html ",' weil die Methode html zurückgibt (und es kann einfach 'data: {id: id}' und löschen Sie den 'contentType 'Option) –

0

Ihre Inhalte ändern Typ "Text" und die Daten ebenfalls ändern.

+0

zurückgeben Ich brauche kein JSON, ich muss nur die Daten zur Formularliste weiterleiten und sie an Teil übergeben Aussicht. Json ist nicht notwendig – JDoeBloke

+0

Dann ändern Sie Ihren Inhaltstyp auf "Text". Aktualisiert die Antwort nach Ihrem Kommentar –

0

Ihre AJAX-Anfrage hat contentType: "html" gesetzt, aber Sie senden tatsächlich JSON (mit data: '{"id":"' + id + '"}'). Und Ihr Controller erhält eine string.

Also entweder Ihren Anruf AJAX ändern, um eine rohe Zeichenfolge senden:

contentType: "text", 
data: { id: id } 

... oder Ihr Controller JSON erhalten aktualisieren. Diese letztere kann so etwas wie dies erreicht werden, indem:

public ActionResult GetSubItems(ViewModel model) 

public class ViewModel { 
    public string Id { get; set; } 
} 

EDIT: auch, als Referenz, könnte man die difference between contentType and dataType sehen wollen.

0

Datentyp ändern zu "application/json" und Daten dazu:

data :{ 
      id : id 
    } 
Verwandte Themen