原文地址:http://www.cnblogs.com/flykai/p/3361064.html
前言
konckout.js本人也是刚刚接触,也是初学,本文的目的是使用ko和asp.net mvc4 webapi来实现一个简单增删改查操作。Knockout是一个以数据模型(data model)为基础的能够帮助你创建富文本,响应显示和编辑用户界面的JavaScript类库。任何时候如果你的UI需要自动更新(比如:更新依赖于用户的行为或者外部数据源的改变),KO能够很简单的帮你实现并且很容易维护。其作用简单来说就是声明所需的数据作为一个JavaScript 模型对象(model object),然后将DOM 元素或者模板(templates)绑定到它上面。
创建mvc4+webapi+konckout.js的简单应用程序
1、首先准备一个测试的数据库,我这以我随便创建的一个数据库为例
表结构如下图:
2、创建一个mvc程序,并在项目中添加一个以上表的ado.net实体数据模型
添加完成以后:
3、添加添加一个带读写操作的EmployeeApiController webapi控制器和用来实现增删改查的普通控制器EmployeeController
添加是注意选择是带读写操作的webapi控制器,选择好数据模型及数据库上下文,方面vs自动为我们生成读写操作。
添加完成后自动生成的完整代码:
using System; using System.Collections.Generic; using System.Data; using System.Data.Entity; using System.Data.Entity.Infrastructure; using System.Linq; using System.Net; using System.Net.Http; using System.Web; using System.Web.Http; using Knockout.Models; namespace Knockout.Controllers { public class EmployeeApiController : ApiController { private DemoDBEntities db = new DemoDBEntities(); // GET api/EmployeeApi public IEnumerable<Employees> GetEmployees() { return db.Employees.AsEnumerable(); } // GET api/EmployeeApi/5 public Employees GetEmployees(int id) { Employees employees = db.Employees.Find(id); if (employees == null) { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound)); } return employees; } // PUT api/EmployeeApi/5 public HttpResponseMessage PutEmployees(int id, Employees employees) { if (ModelState.IsValid && id == employees.EmployeeID) { db.Entry(employees).State = EntityState.Modified; try { db.SaveChanges(); } catch (DbUpdateConcurrencyException) { return Request.CreateResponse(HttpStatusCode.NotFound); } return Request.CreateResponse(HttpStatusCode.OK); } else { return Request.CreateResponse(HttpStatusCode.BadRequest); } } // POST api/EmployeeApi public HttpResponseMessage PostEmployees(Employees employees) { if (ModelState.IsValid) { db.Employees.Add(employees); db.SaveChanges(); HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, employees); response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = employees.EmployeeID })); return response; } else { return Request.CreateResponse(HttpStatusCode.BadRequest); } } // DELETE api/EmployeeApi/5 public HttpResponseMessage DeleteEmployees(int id) { Employees employees = db.Employees.Find(id); if (employees == null) { return Request.CreateResponse(HttpStatusCode.NotFound); } db.Employees.Remove(employees); try { db.SaveChanges(); } catch (DbUpdateConcurrencyException) { return Request.CreateResponse(HttpStatusCode.NotFound); } return Request.CreateResponse(HttpStatusCode.OK, employees); } protected override void Dispose(bool disposing) { db.Dispose(); base.Dispose(disposing); } } }