Übergeben müssen ersten viewmodel-Daten aus ASP.NET MVC knockout.js
Schaute ich den Kontakte-editor auf die Probe knockout.js website:
http://knockoutjs.com/examples/contactsEditor.html
Das Beispiel funktioniert perfekt, aber ich brauchte, um zwei änderungen:
- Übergeben die ursprünglichen Daten ASP.NET MVC-3 controller-action-Methode. Hier ist der code vom server:
Klassen
public class Phone
{
public string Type { get; set; }
public string Number { get; set; }
}
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public List<Phone> Phones { get; set; }
}
Sample-Controller Seite code
List<Phone> phoneList = new List<Phone>();
Person p1 = new Person()
{
FirstName = "Abc",
LastName = "Xyz"
};
Phone phone1 = new Phone()
{
Type = "Home",
Number = "1111111111"
};
Phone phone2 = new Phone()
{
Type = "Mobile",
Number = "1111111112"
};
phoneList.Add(phone1);
phoneList.Add(phone2);
p1.Phones = phoneList;
List<Phone> phoneList2 = new List<Phone>();
Person p2 = new Person()
{
FirstName = "Pqr",
LastName = "Stu"
};
Phone phone3 = new Phone()
{
Type = "Home",
Number = "1111111113"
};
Phone phone4 = new Phone()
{
Type = "Mobile",
Number = "1111111114"
};
phoneList2.Add(phone3);
phoneList2.Add(phone4);
p2.Phones = phoneList2;
people.Add(p1);
people.Add(p2);
ViewBag.InitialData = Json(people, JsonRequestBehavior.AllowGet);
- Abgesehen von Reihen von Kontakten, die Teil des ViewModel, ich brauche auch einige Daten (z.B. ContactListName und ContactListOwner), dass gehört nicht zu den Reihen der Kontakte, sondern auf das ViewModel selbst. Diese Eigenschaften gezeigt werden, die außerhalb der raster der Kontakte.
Würde mich wirklich freuen, wenn mir jemand helfen kann mit dieser.
- was bedeutet die
ViewBag.InitialData
enthält, können Sie die controller-code? möchten Sie verwenden, dieViewBag.InitialData
imko.applyBindings(new ContactsModel(initialData));
? - Danke @3nigma für Ihre Antwort. Ich habe die controller-code in meiner Frage. Und ja, ich beabsichtige zu verwenden, ViewBag.InitialData in ko.applyBindings(new ContactsModel(initialData)), wenn möglich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
Json
Methode, die Sie aufrufen im controller gemeint ist, um wieder eineJsonResult
es nicht schaffen einen JSON-string. Diese Methode würden Sie verwenden, um json zurückgeben von einem ajax-Aufruf.Rückgabe eines JSON-Strings, der zu einer Ansicht verwenden Sie so etwas wie dieses.
Dann in Ihrem code anzeigen
Zur Beantwortung Ihrer zweiten Frage. Um die Globale Liste von Daten, wie diese, definieren Sie einfach eine neue Klasse
ContactsList
e.gFüllen Sie diese und übergeben Sie diese an die
JavascriptSerializer
statt. Sie werden natürlich brauchen, um Ihre jsContactsModel
entsprechend.BEARBEITEN
Hier ein jsfiddle zeigt, dass die änderungen erforderlich.
http://jsfiddle.net/madcapnmckay/jRjwU/
Hoffe, das hilft.
Können Sie auch Ihr Modell statt der ViewBag:
Controller:
Anzeigen:
....
soweit der erste Teil der Frage angeht, können Sie versuchen
den zweiten Teil habe ich wirklich nicht verstanden haben...