在ASP.NET MVC中使用Knockout实践01,绑定Json对象
2014-11-01 19:28
393 查看
本篇体验在ASP.NET MVC下使用Knockout,将使用EF Code First创建数据库。最后让Knockout绑定一个Json对象。
创建一个领域模型。
派生于DbContext的上下文。
设置一些种子数据。
Web.config中connectionStrings节点配置。
创建一个针对Product领域模型的接口。
对IProductRepository接口的实现。
在HomeController中提供一个Action,用来获取数据库中第一条Product记录,并以json格式返回。
在Home/Index.cshtml中,让Knockout绑定一个json类型的View Model,然后向控制器发出一个异步请求,返回的数据更新json对象的name属性。
以上,
○ View Model的类型是一个json对象
○ 使用ko.observable(""),让View Model的成员与界面保持同步
○ 界面视图使用data-bind属性实现与View Model的同步
创建一个领域模型。
namespace MvcApplication3.Models
{
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string Category { get; set; }
public decimal Price { get; set; }
}
}
派生于DbContext的上下文。
using System.Data.Entity;
namespace MvcApplication3.Models
{
public class ProductContext : DbContext
{
public ProductContext() : base("conn")
{
Database.SetInitializer(new ProductInitializer());
}
public DbSet<Product> Products { get; set; }
}
}
设置一些种子数据。
using System.Data.Entity;
namespace MvcApplication3.Models
{
public class ProductInitializer : DropCreateDatabaseIfModelChanges<ProductContext>
{
protected override void Seed(ProductContext context)
{
context.Products.Add(new Product() {Name = "秋意真浓", Price = 85M, Category = "散文"});
context.Products.Add(new Product() {Name = "冬日恋歌", Price = 95M, Category = "小说" });
context.Products.Add(new Product() { Name = "春暖花开", Price = 105M, Category = "散文" });
}
}
}
Web.config中connectionStrings节点配置。
<connectionStrings>
...
<add name="conn" connectionString="Data Source=.;User=用户名;Password=密码;Initial Catalog=ProductStore;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
创建一个针对Product领域模型的接口。
using System.Collections.Generic;
namespace MvcApplication3.Models
{
public interface IProductRepository
{
IEnumerable<Product> GetAll();
Product GetById(int id);
Product Add(Product item);
bool Update(Product item);
bool Delete(int id);
}
}
对IProductRepository接口的实现。
using System.Data;
namespace MvcApplication3.Models
{
public class ProductRepository : IProductRepository
{
private ProductContext db = new ProductContext();
public System.Collections.Generic.IEnumerable<Product> GetAll()
{
return db.Products;
}
public Product GetById(int id)
{
return db.Products.Find(id);
}
public Product Add(Product item)
{
db.Products.Add(item);
db.SaveChanges();
return item;
}
public bool Update(Product item)
{
db.Entry(item).State = EntityState.Modified;
db.SaveChanges();
return true;
}
public bool Delete(int id)
{
Product product = db.Products.Find(id);
db.Products.Remove(product);
if (db.SaveChanges() > 0)
{
return true;
}
else
{
return false;
}
}
}
}
在HomeController中提供一个Action,用来获取数据库中第一条Product记录,并以json格式返回。
using System;
using System.Web.Mvc;
using MvcApplication3.Models;
namespace MvcApplication3.Controllers
{
public class HomeController : Controller
{
static readonly IProductRepository repository = new ProductRepository();
public ActionResult Index()
{
return View();
}
public JsonResult GetFirstProduct()
{
var product = repository.GetById(1);
return Json(product, JsonRequestBehavior.AllowGet);
}
}
}
在Home/Index.cshtml中,让Knockout绑定一个json类型的View Model,然后向控制器发出一个异步请求,返回的数据更新json对象的name属性。
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<div data-bind="text:name"></div> <hr/>
<input type="text" data-bind="value:name"/>
@section scripts
{
<script src="~/Scripts/knockout-2.2.0.js"></script>
<script type="text/javascript">
$(function() {
ko.applyBindings(productViewModel);
$.getJSON('@Url.Action("GetFirstProduct","Home")', function (data) {
productViewModel.name(data.Name);
});
});
var productViewModel = {
id: ko.observable(""),
name: ko.observable("初始值"),
price: ko.observable(""),
category: ko.observable("")
};
</script>
}
以上,
○ View Model的类型是一个json对象
○ 使用ko.observable(""),让View Model的成员与界面保持同步
○ 界面视图使用data-bind属性实现与View Model的同步
相关文章推荐
- 在ASP.NET MVC中使用Knockout实践08,使用foreach绑定集合
- 在ASP.NET MVC中使用Knockout实践02,组合View Model成员、Select绑定、通过构造器创建View Model,扩展View Model方法
- 在ASP.NET MVC中使用Knockout实践09,自定义绑定
- 在ASP.NET MVC中使用Knockout实践04,控制View Model的json格式内容
- 在ASP.NET MVC中使用Knockout实践03,巧用data参数
- ASP.NET Web API实践系列07,获取数据, 使用Ninject实现依赖倒置,使用Knockout实现页面元素和视图模型的双向绑定
- 在ASP.NET MVC中使用Knockout实践07,自定义验证信息的位置与内容
- 在ASP.NET MVC中使用Knockout实践06,自定义验证、异步验证
- 在ASP.NET MVC中使用Knockout实践05,基本验证
- 如何使用jQuery向asp.net Mvc传递复杂json数据-Filter篇
- 读使用反射将业务对象绑定到 ASP.NET 窗体控件有感(二)
- ASP.net MVC使用Jquery-pager和Newtonsoft.Json进行分页
- ASP.net MVC使用Jquery-pager和Newtonsoft.Json进行分页
- 如何使用jQuery向asp.net Mvc传递复杂json数据
- [导入]使用反射将业务对象绑定到 ASP.NET 窗体控件(修改篇)
- Asp.net Mvc Ajax JsonResult简单使用
- 使用反射将业务对象绑定到 ASP.NET 窗体控件
- 如何使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇
- 使用反射将业务对象绑定到 ASP.NET 窗体控件 (转)
- 使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇