KnocoutJs+Mvc+BootStrap 学习笔记(Mvc)
Mvc
1.Html 增加扩展方法
using System.Web.Mvc; namespace KnockoutBootstrapMvc.Entensions
{
public static class HtmlHelperExtensions
{
public static HtmlString HtmlConvertToJson(this HtmlHelper htmlHelper, object model)
{
var setting = new JsonSerializerSettings
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
Formatting = Formatting.Indented
};
return new HtmlString(JsonConvert.SerializeObject(model, setting));
}
}
}
2.Code First
创建Entity实体,当有外键关联时,可以在类内部创建virtual ObjClass 如果是数组为ICollection<ObjectClass>
public class Author
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Biography { get; set; }
public virtual ICollection<Book> Books { get; set; }
} public class Book
{
public int Id { get; set; }
public string Title { get; set; }
public string Isbn { get; set; }
public string Synopsis { get; set; }
public string Description { get; set; }
public string ImageUrl { get; set; }
public virtual Author Author { get; set; } }
3.Db类库\重写OnModelCreating方法
创建Db类继承DbContext,
创建无参构造函数,设置父类连接字符串的名称
创建实体对象 Public DbSet<EntityName> PropertyName {get;set;}
重写OnModelCreating方法,此方法内在实体类创建时触发,可以设置实体的创建格式 如:开启、关闭默认的Id列为主键,是否自增标识列等。
public class BookContext:DbContext
{
public BookContext()
:base("BookContext")
{ } public DbSet<Book> Books { get; set; }
public DbSet<Author> Authors { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
base.OnModelCreating(modelBuilder);
} }
4.创建数据库启动程序类库,集成DropCreateDataBaseIfModelChanges<T> 、重写Seed方法用来初始化表格信息、向数据库表格中插入数据。
未直接save的表,在save关联表时,数据也会插入进去
public class BookInitializer : DropCreateDatabaseIfModelChanges<BookContext>
{
protected override void Seed(BookContext context)
{
var author = new Author()
{
Biography = "..",
FirstName = "zang",
LastName = "san"
};
var books = new List<Book>()
{
new Book()
{
Author=author,
Description="...",
ImageUrl="http://ecx.images-amazon.com",
Isbn="",
Title="Knokout.js",
Synopsis="..." },
new Book()
{
Author=author,
Description="...",
ImageUrl="http://ecx.images-amazon.com",
Isbn="",
Title="bootstrap.css",
Synopsis="..."
}
,
new Book()
{
Author=author,
Description="...",
ImageUrl="http://ecx.images-amazon.com",
Isbn="",
Title="asp.net mvc",
Synopsis="..."
}
}; author = new Author()
{
Biography = "..",
FirstName = "li",
LastName = "si"
};
books.Add(new Book()
{
Author = author,
Description = "...",
ImageUrl = "http://ecx.images-amazon.com",
Isbn = "",
Title = "lisi asp.net mvc",
Synopsis = "..."
}); books.ForEach(b => context.Books.Add(b));
context.SaveChanges();
//base.Seed(context); //new BookInitializer();
} }
在应用启动方法中设置数据库对象,
1.Global.asax中创建Db对象
2.DataBase.SetInitialzer(new Objclass);
3.Db对象.DataBase.Initialize(true);
namespace KnockoutBootstrapMvc
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles); var bookContext = new BookContext();
Database.SetInitializer(new BookInitializer());
bookContext.Database.Initialize(true); }
}
}
5.Controller 方法属性前可以使用HttpPost等定义访问请求格式及是否启用验证
// POST: Authors/Create
// 为了防止“过多发布”攻击,请启用要绑定到的特定属性,有关
// 详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=317598。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "Id,FirstName,LastName,Biography")] Author author)
{
if (ModelState.IsValid)
{
db.Authors.Add(author);
db.SaveChanges();
return RedirectToAction("Index");
} return View(author);
}
6.@sections 定义标签,在Layout页面里可以使用 @RenderSection(name:required:) 来加载对应的标签
PageA.cshtml
@section scripts
{
<script type="text/javascript"> function ViewModel(authors)
{
var self = this;
self.authors = authors;
} var viewModel = new ViewModel(@Html.HtmlConvertToJson(Model));
ko.applyBindings(viewModel);
</script> } Layout.cshtml
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
<script type="text/javascript" src="~/Scripts/knockout-3.4.0.js"></script>
@RenderSection( name:"scripts", required: false)
KnocoutJs+Mvc+BootStrap 学习笔记(Mvc)的更多相关文章
- 2.《Spring学习笔记-MVC》系列文章,讲解返回json数据的文章共有3篇,分别为:
转自:https://www.cnblogs.com/ssslinppp/p/4528892.html 个人认为,使用@ResponseBody方式来实现json数据的返回比较方便,推荐使用. 摘要 ...
- ASP.NET Core MVC 网站学习笔记
ASP.NET Core MVC 网站学习笔记 魏刘宏 2020 年 2 月 17 日 最近因为” 新冠” 疫情在家办公,学习了 ASP.NET Core MVC 网站的一些知识,记录如下. 一.新建 ...
- Bootstrap~学习笔记索引
回到占占推荐博客索引 bootstrap已经用了有段时间了,感觉在使用上还是比较容易接受的,在开发人员用起来上,也还好,不用考虑它的兼容性,手机,平台,PC都可以有效的兼容. bootstrap官方a ...
- Bootstrap学习笔记(二) 表单
在Bootstrap学习笔记(一) 排版的基础上继续学习Bootstrap的表单,编辑器及head内代码不变. 3-1 基础表单 单中常见的元素主要包括:文本输入框.下拉选择框.单选按钮.复选按钮.文 ...
- bootstrap学习笔记之为导航条添加标题、二级菜单及状态 http://www.imooc.com/code/3120
为导航条添加标题.二级菜单及状态 加入导航条标题 在Web页面制作中,常常在菜单前面都会有一个标题(文字字号比其它文字稍大一些),其实在Bootstrap框架也为大家做了这方面考虑,其通过" ...
- bootstrap学习笔记之基础导航条 http://www.imooc.com/code/3111
基础导航条 在Bootstrap框中,导航条和导航从外观上差别不是太多,但在实际使用中导航条要比导航复杂得多.我们先来看导航条中最基础的一个--基础导航条. 使用方法: 在制作一个基础导航条时,主要分 ...
- Bootstrap学习笔记-布局
Bootstrap学习笔记-布局 默认是响应式布局,就是你在改变页面的时候也不会出现乱的现象. <html><head> <meta charset="utf- ...
- 3.《Spring学习笔记-MVC》系列文章,讲解返回json数据的文章共有3篇,分别为:
转自:https://www.cnblogs.com/ssslinppp/p/4528892.html 概述 在文章:<[Spring学习笔记-MVC-3]SpringMVC返回Json数据-方 ...
- 1.《Spring学习笔记-MVC》系列文章,讲解返回json数据的文章共有3篇,分别为:
转自:https://www.cnblogs.com/ssslinppp/p/4528892.html [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://w ...
随机推荐
- linux下获取微秒级精度的时间【转】
转自:https://blog.csdn.net/u011857683/article/details/81320052 使用C语言在linux环境下获得微秒级时间 1. 数据结构 int getti ...
- vc++高级班之窗口篇[4]---让程序只运行一个实例
大家都看过或者使用过类似只运行一个实例的程序,比如:QQ游戏.部分浏览器 等等! 让一个程序只运行一个实例的方法有多种,但是原理都类似,也就是在程序创建后,有窗口的程序在窗口创建前, 检查系统中是 ...
- Centos6.8实现SVN提交后自动更新目录
1.创建svn目录 mkdir /var/www/project 2.从服务器的本地svn上checkout最新版本代码到www目录下的project文件夹,注意本地svn服务器地址和端口号是在启动s ...
- 【BZOJ 2119】股市的预测(SAM)
SAM很好用的啊... 传送门 双倍经验:L-Gap Substrings 基本做法类似,这道题的差分改掉,map 改掉就好了QWQ noteskey 反正就是先差分一下,然后把首项丢掉(没有比较的对 ...
- 一道并查集的(坑)题:关闭农场closing the farm
题目描述 in English: Farmer John and his cows are planning to leave town for a long vacation, and so FJ ...
- ffmpeg-201701[10,16,21,23,25]-bin.7z
ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 5 屏幕横向放大 20 像素 6 屏幕横向缩小 20 像素 S 下一帧 [ -2秒 ] +2 ...
- $Django orm增删改字段、建表 ,单表增删改查,Django请求生命周期
1 orm介绍 ORM是什么 ORM 是 python编程语言后端web框架 Django的核心思想,“Object Relational Mapping”,即对象-关系映射,简称ORM. 一 ...
- 前端跨域问题的总结&&nodejs 中间层的路由转发
前后端交互的时候,跨域是避不开的问题. 总结就是如下: 1.Cors 我在做前后端分离的时候,会采用cors 的方法:便于其他源的调用接口,这个可以设置成任意的源头,也可以允许指定的源头. 下面的是n ...
- LabVIEW版本控制(转)
原文转自https://www.cnblogs.com/EltonLiang/p/7105034.html 在我们工作中,必然会遇到代码的多个版本问题,也必然会遇到版本控制问题.如果所在的公司具有良好 ...
- 转载:UML学习(二)-----类图(silent)
原文:http://www.cnblogs.com/huiy/p/8552607.html 1.什么是类图 类图(Class diagram)主要用于描述系统的结构化设计.类图也是最常用的UML图,用 ...