2017-03-27 2 views
2

Ich verwende ein einfaches Beispiel, um das Knockout Viewmodel an den Controller zu posten. aber es passiert nicht. Die Hundemethode am Controller wird null.knockout.js viewmodel nicht verbindlich in asp.net mvc controller für post

Was mache ich falsch?

My Model

public class Dog 
{ 
    public string name { get; set; } 
    public int age { get; set; } 
} 

mein Controller, in dem das Dog-Objekt wird immer null

[HttpPost] 
public ActionResult Save(Dog dog) 
{ 
    return Json(new { Status = string.Format("Success, saved {0} with age: {1}", dog.name, dog.age) }); 
} 

Ansicht

<form method="POST" data-bind="submit: save"> 
    <div>Name:</div> 
    <div><input type="text" data-bind="value: name" /></div> 

    <div>Age:</div> 
    <div><input type="text" data-bind="value: age" /></div> 

    <div><input type="submit" value="Save" /></div> 
</form> 


var ViewModel = function (data) { 
    var self = this; 
    ko.mapping.fromJS(data, {}, self); 

    //self.isValid = ko.computed(function() { 
    // return self.name().length > 0; 
    //}); 

    self.save = function() { 
     $.ajax({ 
      url: "Home/Save", 
      type: "post", 
      contentType: "application/json", 
      data: ko.mapping.toJSON(self), 
      success: function (response) { 
       alert(response.Status); 
      } 
     }); 
    }; 
}; 
+0

Sind Sie versuchen, die Daten aus dem Formular oder über die Ajax-Post zu schreiben? Weil es keine Bindung an die Speicherfunktion gibt. – muhihsan

+1

durch Ajax post – maztt

+0

Ich denke, dass ich das Objekt – maztt

Antwort

1

Versuchen hinzufügen [FromBody] Attribut

[HttpPost] 
public ActionResult Save([FromBody]Dog dog) 
{ 
    return Json(new { Status = string.Format("Success, saved {0} with age: {1}", dog.name, dog.age) }); 
} 

Und gehen Sie wie folgt in die HTML und JavaScript

<div>Name:</div> 
<div><input type="text" data-bind="value: name" /></div> 

<div>Age:</div> 
<div><input type="text" data-bind="value: age" /></div> 

<div><button data-bind="click: save">Save</button></div> 

<script> 
    var ViewModel = function() { 
    var self = this; 
    self.name = ko.observable(); 
    self.age = ko.observable(); 

    self.save = function() { 
     var jsonData = {'name': self.name(), 'age': self.age()}; 
     $.ajax({ 
      url: "http://localhost:8000/home/saves", 
      type: "post", 
      contentType: "application/json", 
      data: jsonData, 
      success: function (response) { 
       alert(response.Status); 
      } 
     }); 
    }; 
    }; 

    ko.applyBindings(new ViewModel()); 
</script> 
+0

Rückgabe XML-Parsingfehler: kein Wurzelelement gefunden Position: moz-nullprincipal: {5403ac24-a9c4-4147-81c4-71d71452b173} Zeilennummer 1, Spalte 1: – maztt

+0

senden wird ausgeführt var data = { name: "age", Alter: 23 }; – maztt

+0

Ich änderte das Ergebnis. Dies funktioniert mit mir – muhihsan

Verwandte Themen