自带的Tables会有自动分页,搜索等一些动能,很方便,唯一的不足就是添加,修改,删除数据需要刷新页面,并不能静态。

下面说的是如何不刷新页面(Ajax)去执行增,删,改操作。

需要用到的样式,JS库(需要自己去复制到自己的项目中)

   @*bootstrap 样式*@
<link href="~/Content/css/bootstrap.css" rel="stylesheet" />
@*datatable 样式*@
<link rel="stylesheet" type="text/css" href="/Content/media/css/jquery.dataTables.css"> @*jquery*@
<script type="text/javascript" charset="utf8" src="/Content/media/js/jquery.js"></script> @*DataTables*@
<script type="text/javascript" charset="utf8" src="/Content/media/js/jquery.dataTables.js"></script>
@*bootstrap*@
<script src="~/Content/js/bootstrap.js"></script>

前台:

<input type="button" id="btn" value="Add Data" />

@*datatables表格结构*@
<table id="example" class="display" cellspacing="" width="100%">
<thead>(头部)
<tr>
<th>id</th>
<th>a</th>
<th>b</th>
<th>c</th>
<th>d</th>
<th>修改</th>
</tr>
</thead>
<tbody>(内容)
这里就是呈现数据的位子
</tbody>
<tfoot>(脚部)
<tr>
<th>id</th>
<th>a</th>
<th>b</th>
<th>c</th>
<th>d</th>
<th>修改</th>
</tr>
</tfoot>
</table> @*模态框开始*@ (添加的模态框--这里演示的是固定的) 可以把添加的用布局页封装,在动态加载到模态框中 做修改一样的,这里只演示添加
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title" id="myModalLabel">模态框(Modal)标题</h4>
</div>
<div class="modal-body">
@*属性a*@
<div class="control-group success">
<label class="control-label" for="a">A</label>
<div class="controls">
<input type="text" id="a" name="a">
<span class="help-inline">属性a!!!</span>
</div>
</div>
@*属性b*@
<div class="control-group success">
<label class="control-label" for="b">B</label>
<div class="controls">
<input type="text" id="b" name="b">
<span class="help-inline">属性b!!!</span>
</div>
</div>
@*属性c*@
<div class="control-group success">
<label class="control-label" for="c">C</label>
<div class="controls">
<input type="text" id="c" name="c">
<span class="help-inline">属性c!!!</span>
</div>
@*属性d*@
<div class="control-group success">
<label class="control-label" for="d">D</label>
<div class="controls">
<input type="text" id="d" name="d">
<span class="help-inline">属性d!!!</span>
</div>
</div> </div> </div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary" id="commit">提交更改</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal -->
</div>
@*模态框结束*@

前台JS代码:

<script>
$(function () {
//初始化 加载Tbales中的数据
$(document).ready(function () {
$('#example').DataTable({
"ajax": "@Url.Action("data")", //动态加载数据(注意json格式)
"processing": true,
"columnDefs": [{ //添加一列
"targets": 5, //目标列 (这里第6列),一般是显示操作列
"data": null, //固定为Null
"defaultContent": "<button id='editrow' type='button'></button>" //这列里面的内容,一个修改的按钮
}); //模态框
$("#btn").click(function () {
$("#myModal").modal('show');
});
//提交
$("#commit").click(function () {
//参数对象
var p = {
a: $("#a").val(),
b: $("#b").val(),
c: $("#c").val(),
d: $("#d").val()
}
//注意:这里使用的是自动装配,表中的字段就是a,b,c,d。 只要把你表中的字段赋值就行,这里没有表单提交,所以用Js代码赋值,赋值了,P对象就有值了
$.get("@Url.Action("Insert")", p, function (data) {
//回调隐藏
$("#myModal").modal('hide'); var t = $('#example').DataTable();
//第一种
//手动添加行 其实是做了两步,这个是全部都不刷新,做的一个假像
//1,在后台已经把数据加载到数据库中了
//2,手动改表格中的数据,这行数据并不是数据库中的数据,恰巧这行数据跟数据库中的数据一模一样,给人一种假象,数据添加成功
t.row.add([
data, //返回编号
p.a,
p.b,
p.c,
p.d
]).draw(false);
//第二种
//或者,刷新表格
$("#example").DataTable().ajax.reload();//重新加载表格,只刷新表格,不刷新页面
//两种方法取一种即可 修改,删除都是差不多的
});
}); });
});
</script>

后台代码:

DataClasses1DataContext dcdc = new DataClasses1DataContext();   //EF关系,连接数据库,对数据进行操作,一个LinQ to SQL类
//
// GET: /Demo/ public ActionResult Index()
{
return View();
} //初始化数据 表格里面的内容需要这个方法来加载
public ActionResult Data()
{
List<string[]> list = new List<string[]>(); //一个字符串数组集合,一个数组代表一行数据,相当于表中的一行数据,集合可以保存这张表中所有的数据
foreach (var item in dcdc.Table) //循环这张表,用来存数据
{ //需要显示的字段全部存到数组中,可以多张表,这里只加载一张表 string[] a = new[] { item.Id.ToString(), item.a, item.b, item.c, item.d };
              list.Add(a);
}
var data = new { data = list }; //转成Json格式
//datatable要求的数据格式
return Json(data, JsonRequestBehavior.AllowGet);
}
//添加一条记录
public ActionResult Insert(Table t)
{
//添加
dcdc.Table.InsertOnSubmit(t);
dcdc.SubmitChanges();
//返回编号
var id = dcdc.Table.Max(x => x.Id);
return Content(id.ToString()); //返刷新表格的话,返回的数据随意
}
}

值得一提,MVC中添加,修改都是两个一样的方法名,只是参数不一样

在一个方法的头部有 [xxx],就是声明这个方法是什么,Get,Post,过滤器都是在头部声明的

添加:

     [HttpGet]  //声明Get访问   用来做显示
public ActionResult AddProImg()
{
return View();
}
[HttpPost] //声明Post访问 用来对数据库执行操作
public ActionResult AddProImg(ProductImg img)
{
img.CreateTime = DateTime.Now;
sc.ProductImg.InsertOnSubmit(img);
sc.SubmitChanges();
return Content("Success");
}

修改:

        [HttpGet]  //显示数据
public ActionResult EditProImg(int? id)
{
ViewData.Model = sc.ProductImg.Where(x => x.ImgID == id.Value).First();
ViewBag.product = sc.ProductProperty.AsEnumerable();
return View();
}
[HttpPost] //对数据库进行操作
public ActionResult EditProImg(ProductImg img)
{
var result = sc.ProductImg.Where(x => x.ImgID == img.ImgID).First();
result.Description = img.Description;
result.ProperID = img.ProperID;
result.ImgName = img.ImgName;
sc.SubmitChanges();
return Content("修改成功");
}

BootStrap--Tables(表格) MVC中不刷新做增,删,改(C#)的更多相关文章

  1. MVC EF 增 删 改 查

    using System;using System.Collections.Generic;using System.Linq;using System.Web;//using System.Data ...

  2. 第18课-数据库开发及ado.net 连接数据库.增.删.改向表中插入数据并且返回自动编号.SQLDataReade读取数据

    第18课-数据库开发及ado.net 连接数据库.增.删.改向表中插入数据并且返回自动编号.SQLDataReade读取数据 ADO.NET 为什么要学习? 我们要搭建一个平台(Web/Winform ...

  3. MVC学习-用EF做增删改查

    在做增删改查先,先介绍几个知识点: 1.代理类 在将对象方法EF数据上下文时,EF会为该对象封装 一个代理类对象, 同时为该对象的每一个属性添加一个标志:unchanged, 当对该对象某个属性进行操 ...

  4. python基础中的四大天王-增-删-改-查

    列表-list-[] 输入内存储存容器 发生改变通常直接变化,让我们看看下面列子 增---默认在最后添加 #append()--括号中可以是数字,可以是字符串,可以是元祖,可以是集合,可以是字典 #l ...

  5. MVC中使用AuthorizeAttribute做身份验证操作

    代码顺序为:OnAuthorization-->AuthorizeCore-->HandleUnauthorizedRequest 如果AuthorizeCore返回false时,才会走H ...

  6. MVC中使用AuthorizeAttribute做身份验证操作【转】

    http://blog.csdn.net/try530/article/details/7782704 代码顺序为:OnAuthorization-->AuthorizeCore-->Ha ...

  7. MVC中使用过滤器做权限认证需要注意的地方

    最近一项目接近尾声,正准备调试的时候发现一条原本不应该执行的SQL语句执行报错了,本就不应该执行,所以当然也就出错,找了一下,问题如下. 我这里是直接重写OnActionExecuting方法来达到目 ...

  8. #Java Web累积#表格<table>中隐藏列做备用数据

    初入JW,MyEclipse,JS文件中码砖时怎么连个提示都没有. 步骤1 JSP代码中,Table多出一列,如下列代码中的 Other,其中css文件中将col00的width设置为0px; < ...

  9. MVC中的Ajax与增删改查

    自入手新项目以来,一直处于加班状态,博客也有两周没更,刚刚完成项目的两个模组,稍有喘息之机,写写关于项目中 的增删改查,这算是一个老生常谈的问题了,就连基本的教材书上都有.刚看书的时候,以为 没什么可 ...

随机推荐

  1. HTML DOM节点

    在 DOM 树中,基本上一切都是节点.每个元素在最底层上都是 DOM 树中的节点.每个属性都是节点.每段文本都是节点.甚至注释.特殊字符(如版权符号 ©).DOCTYPE 声明(如果 HTML 或者 ...

  2. CSS基本知识介绍

    CSS (Cascading Style Sheet)叠层样式表.用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言. 样式的几种控制方法: 1.行内样式         <div ...

  3. 【转】JAVA的StringBuffer类

    [转]JAVA的StringBuffer类    StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBu ...

  4. 关于svn获取获取文件时 Unable to connect to a repository at URL"https://..."执行上下文错误:参数错误

    错误提示: 下面的六种解决方案都未能解决: 1.不提示输入用户名和密码,不管重装多少次都一样. 2.TortoiseSVN的setting->Saved Data->Authenticat ...

  5. Delphi ComboBox的属性和事件、及几个鼠标事件的触发

    临时做了两个小的测试程序,为了彻底弄清楚combobox的OnClick.OnChange.OnDropDown.OnCloseUp.OnSelect事件的触发及其先后顺序. 另附常用鼠标事件的触发情 ...

  6. C++ Primer 5th 第15章 面向对象程序设计

    面向对象程序设计的核心思想是:数据抽象.继承和动态绑定. 数据抽象:将类的接口与实现分离: 继承:定义相似类型并对相似关系建模: 动态绑定:一定程度上上忽略相似类型间的区别,用同一方式使用它们. 1. ...

  7. JavaScript设计模式之工厂模式

    一.工厂模式概念 工厂模式定义一个用于创建对象的接口,这个接口由子类决定实例化哪一个类.该模式使一个类的实例化延迟到了子类.而子类可以重写接口方法以便创建的时候指定自己的对象类型(抽象工厂). 这个模 ...

  8. Spring4.0学习笔记(9) —— Spring泛型依赖注入

    1.定义基础仓库 package com.spring.generic.di; public class BaseRepository<T> { } 2.定义基础服务层 package c ...

  9. 手写 title 提示

    jquery实现 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...

  10. 浅谈MIPS地址对齐问题

    1.什么叫地址对齐? RISC 下使用访存指令读取或写入数据单元时,目标地址必须是所访问之数据单元字节数的整数倍,这个叫做地址对齐. 2.计算机主要的架构分哪两类?及其地址对齐在两者的区别? 计算机主 ...