2016-11-20 3 views
1

ich MVC verwende und ein Formular aus meiner Sicht haben alsMVC-Formular Javascript Post ist null innerhalb Controller

@using(Html.BeginForm(null, null, FormMethod.Post)) { 
    @Html.HiddenFor(m => m.Id) 
    @Html.HiddenFor(m => m.SysCreated) 
    @Html.HiddenFor(m => m.SysDeleted) 

    @Html.TextBoxFor(m => m.Name, new { @class = "form-control" }) 
    <input typeof="button" value="Create New" onclick="newSchool(this)" class="btn btn-sm btn-primary btn-block btn-signin" style = "margin-bottom:20px"/> 
} 

folgt Ich versuche, dies mit einer JavaScript-Funktion zu schreiben, damit ich die Seite erfrischend vermeiden. Ich habe die folgende Funktion

function newSchool(btnClicked) { 
    var $form = $(btnClicked).parents('form'); 
    var data = $form.serialize(); 

    console.log(JSON.stringify(data)); 
    $.ajax({ 
     url: '@Url.Action("AddSchool", "SetupSchools")', 
     type: 'POST', 
     contentType: "json", 
     data: { 
      newSchool: JSON.stringify(data) 
     }, 
     success: function() { 
      DevExpress.ui.notify('School Added', 'success', 1500); 
     }, 
     failure: function(xhr, textStatus, errorThrown) { 
      DevExpress.ui.notify('Error - ' + XMLHttpRequest.responseText, 'error', 1500); 
     }, 
    }); 
} 

ich in der Konsole sehen können, dass die Daten dort und sieht richtig, aber die Daten in meinem Controller ist immer null. Mein Controller sieht wie folgt aus:

public void AddSchool(Models.School school) 
{ 
} 

Wie kann ich die Daten korrekt senden? Oder gibt es eine bessere Möglichkeit, die Daten zu posten, ohne das Formular zu aktualisieren.

+0

Bitte beachten Sie, dass das Tag [tag: model-view-controller] für Fragen zum * pattern * gedacht ist. Verwenden Sie das Tag [tag: asp.net-mvc] für Fragen zur ASP.NET-Implementierung. –

+0

können Sie Ajax.BeginForm Helfer verwenden, und es nicht stringifizieren, direkt post es –

+0

wie: '' Daten: Daten, '' –

Antwort

1

Da einige der Kommentare vorgeschlagen, müssen Sie die contentType: json entfernen und verwenden data: $("form").serialize(), und meine persönliche Empfehlung ist cache: false zu verwenden, um immer die Daten an die Steuerung zu senden, wenn ich nicht irre, IE verwendet, um die Ajax-Request zwischenzuspeichern wenn es gleich aussieht.

Hier ist eine "Geige" Sie funktioniert es mit Ihnen aktuellen Code sehen:

https://dotnetfiddle.net/IGaQnt

Und Ihr Code sollte so sein:

function newSchool(btnClicked) { 
     var $form = $(btnClicked).parents('form'); 
      var data = $form.serialize(); 

      console.log(JSON.stringify(data)); 
      $.ajax({ 
       url: '@Url.Action("AddSchool", "Home")', 
       type: 'POST', 
       cache: false, 
       data: data, 
       success: function(result) { 
        alert(result); //I return the name the user submited, you can do whatever you want here. 
       }, 
       failure: function(xhr, textStatus, errorThrown) { 
        DevExpress.ui.notify('Error - ' + XMLHttpRequest.responseText, 'error', 1500); 
       }, 
      }); 
     } 

ich in die zu entschieden Geige a JsonResult statt einer void, ich weiß nicht, Sie vervollständigen Code ändern Sie es so, wie Sie brauchen.

0

Ich gehe davon aus, dass die Schule als Eigenschaften die Elemente auf Ihrem Formular hat, wenn Sie das richtig ist, verwenden Sie $ form.serializeArray(), um die Daten im JSON-Format zu erhalten und diese Variable auf Ihrem senden asynchrone Anfrage Ich denke, der Fehler liegt daran, dass Sie ein Objekt Newschool erstellen und alle Daten diesem Objekt zuweisen, aber was Sie in der Steuerung erwarten, sind die Daten nicht dieses Objekt.

Verwandte Themen