上一篇搭建了页面,这里写下功能。

这里我用WebApi实现数据的增删改查。

一、新建Controller

为了区分明确,我在Controller文件夹下建立一个WebApi文件夹存放。

选中文件夹右键单击=》添加=》控制器=》Web Api控制器

1、这样会自动生成一个控制器,继承ApiController类

namespace mvc.Controllers.WebApi
{
public class DepartmentController : ApiController
{ }
}

2、在App_Start文件夹下会自动生成WebApiConfig文件,这个文件的功能是定义WebApi的路由,WebApi路由是单独控制的

    public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}

3、路由是可以自定义的,不一定要按照默认的规则,可以根据自己的需要调整路由规则。

为了区分更明确,我在默认路由的基础上增加一个action

 public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}

4、在Global.asax文件的Application_Start方法下注册WebApi路由,如果不注册是路由规则是不生效的。

 protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}

二、为了使用方便新建一些辅助类

在models文件夹下,新增PageQuery文件夹存放

1、记录返回值

    public class APIResult
{
public APIResult()
{
message = "请求失败";
} public bool success { get; set; }
public string message { get; set; }
public int code { get; set; }
public object data { get; set; }
}

2、查询基类

    public class QueryBase
{
public int page { get; set; }
public int rows { get; set; }
}

3、查询类,继承查询基类

    public class DepartmentQuery: QueryBase
{
/// <summary>
/// 部门名称
/// </summary>
public string Name { get; set; }
}

三、实现功能

一般请求方式是这样区分的: Post:新增记录;Put:修改记录;Get:获取数据;Delete:删除数据

namespace mvc.Controllers.WebApi
{
public class DepartmentController : ApiController
{
/// <summary>
/// 查询部门信息
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
[HttpPost]
public IHttpActionResult Pager(DepartmentQuery query)
{
List<Department> deplist = new List<Department>();
int total = ;
using (var context = new DBContext.PracticeContext())
{
var querylist = context.Department.AsQueryable();
if (!string.IsNullOrEmpty(query.Name))
{
querylist = querylist.Where(s => s.Name.Contains(query.Name));
}
querylist = querylist.Where(s => s.IsDel == false);
total = querylist.Count();
var result = querylist.OrderByDescending(s => s.OrderId).Skip(query.rows * (query.page - )).Take(query.rows);
deplist = result.ToList();
return Ok(new APIResult()
{
success = true,
message = "请求成功",
data = deplist
});
}
}
/// <summary>
/// 新增部门信息
/// </summary>
/// <param name="dep">部门model</param>
/// <returns></returns>
[HttpPost]
public IHttpActionResult Create(Department dep)
{
using (var context = new DBContext.PracticeContext())
{
Department department = new Department
{
Name = dep.Name,
Introduce = dep.Introduce,
OrderId = dep.OrderId,
IsShow = dep.IsShow
};
context.Department.Add(department);
context.SaveChanges();
return Ok(new APIResult()
{
success = true,
data = department,
message = "新增成功"
});
}
}
/// <summary>
/// 修改部门信息
/// </summary>
/// <param name="dep">部门model</param>
/// <returns></returns>
[HttpPut]
public IHttpActionResult Update(int id, Department dep)
{
using (var context = new DBContext.PracticeContext())
{
Department department = context.Department.Find(id);
if (department != null)
{
department.Name = dep.Name;
department.Introduce = dep.Introduce;
department.OrderId = dep.OrderId;
department.IsShow = dep.IsShow;
}
context.SaveChanges();
return Ok(new APIResult()
{
success = true,
data = department,
message = "更新成功"
});
}
}
/// <summary>
/// 删除部门
/// </summary>
/// <param name="id">Id</param>
/// <returns></returns>
[HttpDelete]
public IHttpActionResult Delete(int id)
{
using (var context = new DBContext.PracticeContext())
{
Department department = context.Department.Find(id);
if (department != null)
{
department.IsDel = true;
}
context.SaveChanges(); return Ok(new APIResult()
{
success = true,
message = "删除成功"
});
}
}
}
}

四、调用WebApi接口

1、在控制器中新建Add方法

    public class DepartmentController : Controller
{
// GET: Department
public ActionResult Index()
{
return View();
}
public ActionResult Add()
{
return View();
}
}

2、 光标定在Add方法上右键单击=》添加视图

3、添加表单

@model mvc.Models.Department

@{
ViewBag.Title = "Edit";
Layout = null;
} <div class="wrapper">
<div class="easyui-panel" title="部门添加" style="width:30%;height:100%">
<form id="ff">
<table style="border-collapse:separate; border-spacing:10px;">
<tr>
<td>部门名称:</td>
<td>
@Html.TextBoxFor(s => s.Name, new { @class = "easyui-textbox", style = "width:300px" })
</td>
</tr>
<tr>
<td>介绍:</td>
<td>
@Html.TextBoxFor(s => s.Introduce, new { @class = "easyui-textbox", style = "width:100%", @data_options = "multiline:true,height:80" })
</td>
</tr>
<tr>
<td>排序值:</td>
<td>
@Html.TextBoxFor(s => s.OrderId, new { @class = "easyui-numberspinner", style = "width:100%", data_options = "min:1,max:100,required:true" })
</td>
</tr>
<tr>
<td> 是否显示:</td>
<td>
<input id="IsShow" class="easyui-switchbutton" data-options="onText:'是',offText:'否'">
</td>
</tr>
<tr>
<td></td>
<td>
<a href="javascript:void(0)" class="easyui-linkbutton" onclick="submitForm()">保存</a>
</td>
</tr>
</table>
</form>
</div>
</div> <script src="~/WebPlugins/EasyUI/jquery.min.js"></script>
<script src="~/WebPlugins/EasyUI/jquery.easyui.min.js"></script>
<link href="~/WebPlugins/EasyUI/themes/default/easyui.css" rel="stylesheet" /> <script type="text/javascript">
function submitForm() {
$.ajax({
url: '/api/department/create',
method: "POST",
data: $('form').serialize(),
dataType: 'json',
success: function (data) {
var result = eval(data);
if (result["success"]) {
alert("添加成功!");
}
}
})
}
</script>

4、点击确定之后表单中的数据就添加进数据库了。

C# MVC+EF—WebApi的更多相关文章

  1. Asp.Net MVC EF各版本区别

      2009年發行ASP.NET MVC 1.0版 2010年發行ASP.NET MVC 2.0版,VS2010 2011年發行ASP.NET MVC 3.0版+EF4,需要.Net4.0支持,VS2 ...

  2. SlickOne -- 基于Dapper, Mvc和WebAPI 的快速开发框架

    前言:在两年前,项目组推出了基于Dapper,Mvc和WebApi的快速开发框架,随着后续Slickflow产品的实践和应用,今再次对SlickOne项目做以回顾和总结.其目的是精简,持续改进,保持重 ...

  3. SQLSERVER 数据库性能的的基本 MVC + EF + Bootstrap 2 权限管理

    SQLSERVER 数据库性能的基本 很久没有写文章了,在系统正式上线之前,DBA一般都要测试一下服务器的性能 比如你有很多的服务器,有些做web服务器,有些做缓存服务器,有些做文件服务器,有些做数据 ...

  4. [转帖]Asp.Net MVC EF各版本区别

    Asp.Net MVC EF各版本区别 https://www.cnblogs.com/liangxiaofeng/p/5840754.html 2009年發行ASP.NET MVC 1.0版 201 ...

  5. SlickOne敏捷开发框架介绍(一) -- 基于Dapper, Mvc和WebAPI 的快速开发框架

    前言:在两年前(最初发布时间:2013年1月9日(csdn),当前文章时间2015年11月10日),项目组推出了基于Dapper,Mvc和WebApi的快速开发框架,随着后续Slickflow产品的实 ...

  6. [转]Asp.Net MVC EF各版本区别

    本文转自:http://www.cnblogs.com/liangxiaofeng/p/5840754.html 2009年發行ASP.NET MVC 1.0版 2010年發行ASP.NET MVC ...

  7. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(24)-权限组的设计和实现(附源码)(终结)

    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    ...

  8. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(23)-设置角色遗留问题和为权限设置角色以及EasyUI Tabs的使用

    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    ...

  9. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(22)-为用户设置角色

    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    ...

随机推荐

  1. cmake mac 安装

    Cmake 在mac上的安装 cmake 官网:https://cmake.org/ 以源码方式安装 1. 下载源码:https://cmake.org/files/v3.9/cmake-3.9.0- ...

  2. GDALSetProjection使用的一个注意事项

    GDALSetProjection 简述 GDALSetProjection是用来给GDALDataset设定投影信息(坐标系统)的接口,实际上是GDALDataset::SetProjection这 ...

  3. js事件探秘

    Javascript中的事件,可以和html交互. 事件流 IE&Opera:事件冒泡 其他浏览器: 事件捕获 事件冒泡:事件由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传 ...

  4. WEB前端工程师的职业发展路线图、怎样做WEB前端职业规划

    20151028整理 —————————— 知乎-Web前端的路该怎么走?(2015年发表) 在规模越大的团队,工作划分得越细腻,专注的点就越深,但同时就可能会被限制在某个狭窄点上,成为某个角落的技术 ...

  5. 《STL源码剖析》学习之traits编程

    侯捷老师在<STL源码剖析>中说到:了解traits编程技术,就像获得“芝麻开门”的口诀一样,从此得以一窥STL源码的奥秘.如此一说,其重要性就不言而喻了.      之前已经介绍过迭代器 ...

  6. 12C -- ORA-65048 ORA-65048

    创建common user的时候报错: $ sqlplus '/as sysdba' SQL*Plus: Release 12.2.0.1.0 Production on Tue Apr 18 11: ...

  7. 【spark 深入学习 06】RDD编程之旅基础篇02-Spaek shell

    --------------------- 本节内容: · Spark转换 RDD操作实例 · Spark行动 RDD操作实例 · 参考资料 --------------------- 关于学习编程方 ...

  8. idea 导入 android项目

    1. 2. 主要是勾选上面选项. next next 导入即可

  9. java 中使用log4j

    一.控制台使用 1.导入log4j包到工程中 2.配置: log4j.rootLogger=DEBUG,console,R log4j.appender.console=org.apache.log4 ...

  10. 每一个开发人员都应该有一款自己的App

    [谋哥每天一干货]          这篇文章不是鸡汤,是谋哥自己的感悟了. 谋哥近期每日一干货,坚持每天写,才发现这个事情你要是能坚持一年超级难.365天无论刮风下雨.心情好或不好.生病或生气.每天 ...