Yas*_*sir 6 json viewmodel asp.net-mvc-3 knockout.js
我在knockout.js网站上查看了联系人编辑器示例:
http://knockoutjs.com/examples/contactsEditor.html
该示例工作正常,但我需要对其进行两处更改:
类
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; }
}
Run Code Online (Sandbox Code Playgroud)
控制器侧代码示例
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);
Run Code Online (Sandbox Code Playgroud)
如果有人可以帮助我,我真的很感激.
Json您在控制器中调用的方法是返回JsonResult它不创建JSON字符串.您将使用此方法从ajax调用返回json.
要将JSON字符串返回到视图,请使用以下内容.
JavaScriptSerializer serializer = new JavaScriptSerializer();
ViewBag.InitialData = serializer.Serialize(people);
Run Code Online (Sandbox Code Playgroud)
然后在您的视图代码中
<script>
var initialData = '@Html.Raw(ViewBag.InitialData)';
....
</script>
Run Code Online (Sandbox Code Playgroud)
回答你的第二个问题.为了传递诸如此类的全局列表数据,只需定义一个新类,ContactsList例如
public class ContactsList
{
public string Name { get;set; }
public string Owner { get;set; }
public IList<People> People { get;set; }
}
Run Code Online (Sandbox Code Playgroud)
填充此内容并将其传递给JavascriptSerializer相反.你显然需要相应地调整你的js ContactsModel.
编辑
这是一个jsfiddle,演示了所需的更改.
http://jsfiddle.net/madcapnmckay/jRjwU/
希望这可以帮助.
您也可以使用您的模型而不是ViewBag:
控制器:
public ActionResult Index()
{
var data= GetYourDataFromSomewhere();
return View(data);
}
Run Code Online (Sandbox Code Playgroud)
视图:
@model IEnumerable<ModelName>
Run Code Online (Sandbox Code Playgroud)
....
<script type="text/javascript">
$(document).ready(function () {
var dataForKO = new KOViewModel(@Html.Raw(Json.Encode(Model)));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10281 次 |
| 最近记录: |