Bootstrap   发布时间:2022-04-18  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了MVC5 + EF6 + Bootstrap3 (12) 新建数据大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

前言

前面讲解了如何创建一个查询页面并给查询页面添加排序、搜索分页功能。今天我们来讲讲如何向这个列表添加数据。

讲解的顺序将按照添加数据的步骤的时间顺序来进行,方便大家理清逻辑关系。本节将涉及前面讲到的很多知识点,而且还有很多新知识点。帮助大家温故知新,融会贯通。

创建页面预览如下:

@H_301_15@

MVC5 + EF6 + Bootstrap3 (12) 新建数据

新建链接

首先在之前创建好的查询页面添加一个能够跳转到创建页面链接,将这个链接添加标题搜索栏之间。代码如下:

MVC5 + EF6 + Bootstrap3 (12) 新建数据

<h2>students</>

p>
    @Html.ActionLink("Create New","Create")
>

@using (Html.beginForm("Index","student",FormMethod.Get))
{
    >
        Find by name:@Html.TextBox("SearchString",ViewBag.CurrentFilter as String)
        input type="submit" value="Search"/>
  >
}

MVC5 + EF6 + Bootstrap3 (12) 新建数据

上面代码中黄色部分就是添加链接,这个ActionLink生成HTML代码如下:

a href="/Company/Create">Add New Workera>

可以看到这个链接访问的是CompanyController下的Create Action。下面来创建这个Action。

新建页面Action

打开文件~\Controllers\CompanyController.cs。在这个Controller中添加一个Create Action,如下所示:

public ViewResult Create() { return View(); }

这么简单?对就是这样,创建数据的页面所有信息都需要用户去填,自然不需要传递数据,也就没有什么操作。

这个Action调用了它对应的View,那么我们就来创建这个View。

新建页面View

在~\Views\Company\文件夹下创建Create.cshtml视图,写入如下代码

1 @model SlarkInc.Models.Worker 2 @{ 3 ViewBag.title = "Add New Worker"; 4 } 5 > 6 @using (Html.beginForm()) 7 { 8 @Html.AntiForgeryToken() 9 div class="form-horizontal"10 hr /> 11 @Html.ValidationSumMary(true) 12 ="form-group"13 @Html.LabelFor(model => model.FirstName,new { @class = "control-label col-md-2" }) 14 ="col-md-10"15 @Html.EditorFor(model => model.FirstName) 16 @Html.ValidationmessageFor(model => model.FirstName) 17 div18 19 20 @Html.LabelFor(model => model.LastName,128)">21 22 @Html.EditorFor(model => model.lastName) 23 @Html.ValidationmessageFor(model => model.lastName) 24 25 26 27 @Html.LabelFor(model => model.Sex,128)">28 29 @Html.EnumDropDownListFor(model => model.SeX) 30 @Html.ValidationmessageFor(model => model.SeX) 31 32 33 34 @Html.LabelFor(model => model.rating,128)">35 36 @Html.EditorFor(model => model.rating) 37 @Html.ValidationmessageFor(model => model.rating) 38 39 40 41 ="col-md-offset-2 col-md-10"42 @Html.Submit("Submit") 43 44 45 46 } 47 48 @Html.ActionLink("BACk to List","Index") 49 >
View的第1行代码如下所示,引入了Models文件夹里的Worker类。

@model SlarkInc.Models.Worker

为了更好的进行数据操作,Worker类做了改动,改动之后的代码如下:

1
using System.ComponentModel.DataAnnotations; 2 namespace SlarkInc.Models 3 { 4 public enum Sex 5 { 6 Male,Female 7 } 8 class Worker 9 { int ID { get; set; } 11 [Display(Name = "last name")] 12 [DataType(DataType.Text)] 13 [required] 14 String LastName { 15 [Display(Name = First Name16 [DataType(DataType.Text)] 17 [required] String FirstName { 19 [required] 20 public Sex Sex { 21 double? RaTing { 22 } 23 }
代码中第1行引入了DataAnnotations类库,这样我们就可以在Worker类中添加元数据来在View中更好的操作数据。关于这部分内容可以点这里进一步了解。

 看View的第13行代码

@Html.LabelFor(model => model.FirstName,new { @class = control-label col-md-2" })

这里的LabelFor函数用来显示这个数据对应的名称,它会去找Worker类的FirstName对应的数据名称,也就是Model里的第15行:

[Display(Name = ")]

然后用Html把它显示出来,如下:

@H_618_409@label
="control-label col-md-2" for="FirstName">First Namelabel View中的第15行:

@Html.EditorFor(model => model.FirstName)

会根据Model中的第16行:

[DataType(DataType.Text)]

来决定用哪种input元素来编辑数据,既然是Text类型的,那就用type="text"的input,如下所示:

="text-Box single-line"
data-val="true" data-val-required="First Name 字段是必需的。" id="FirstName" name="FirstName" type="text"="" />

那上面的代码中 "data-val-required="First Name 字段是必需的。"" 这一段是哪来的呢?

这是EditorFor函数读取到Model中的第17行:

这一行表示这个数据是必填项,如果不填则会显示信息"First Name 字段是必需的。"。

在View中的第29行用到函数Html.EnumDropDownListFor,如下所示:

@Html.EnumDropDownListFor(model => model.SeX)

这个函数可以把Enum类型的数据在页面上以下拉菜单的形式显示出来供人编辑。

不过这个函数可不是那么容易用,首先Visual studio的版本必须是2013或者以上的,项目必须用的是MVC5,然后在菜单中选择工具->库程序包管理器-> 管理解决方案的NuGet程序包。如下所示选择联机,在左上角@L_480_6@mVC然后安装最新的MVC 5.2.2版。

@H_301_15@

MVC5 + EF6 + Bootstrap3 (12) 新建数据

更新好之后,这个函数就可以正常使用了。它会根据Sex这个Enum变量来生成下拉菜单。这个Enum的定义如下:

enum Sex { Male,Female }

那么它生成的下拉菜单代码如下:

@H_618_409@SELEct data-val="Sex 字段是必需的。"="Sex"="Sex"option SELEcted="SELEcted"="0">@H_168_25@maleoptionvalue="1">FemaleSELEct View的第16行代码

@Html.ValidationmessageFor(model => model.FirstName)

其中ValidationmessageFor函数用来验证数据的有效性。它根据在Model中这个属性的类型来验证输入的值是否符合要求。比如rating这个属性是Double类型的,那么在输入数据时,如果数据不是数字则会有相提示,并且不能提交。

View的第6、7、46行是如下所示的不带参数的Form函数结构:

@using (Html.beginForm()){}

这样的结构如果不带任何参数,则Form会以Post方法提交给本页面对应的Controller和Action,因此其生成HTML代码就是如下形式:

<form action=/Company/Create" method=post"></form>

 在View中使用了Bootstrap的横向表单布局其结构如下:

>
> =""></> 显示出来的效果如下所示:

@H_301_15@

MVC5 + EF6 + Bootstrap3 (12) 新建数据

每一行对应一个属性,左边是属性名,右边是属性对应的编辑框。属性名的col-md-2表示其占Form总宽度的2/12,col-md-10表示其占Form总宽度的10/12。这用到了Bootstrop的栅格系统。栅格系统详细介绍请点这里

View第8行@Html.AntiForgeryToken()函数的作用是抵御网页跨站请求伪造漏洞(CSRF Cross-site request forgery)。这个漏洞可以盗用登录用户身份发送恶意请求。比如一个用户登录了网上银行,然后访问攻击者的网站,网站就会通过登录用户发出请求来获取银行信息。

View第11行使用Html.ValidationSumMary(true)。表示只@L_37_114@model级的验证错误信息。其具体用法会在后面章节中详细介绍。

上面这几段对Create.cshtml文件中具有代表性的技术知识点做了详细说明,其他行不再赘述,有问题请留言。

添加数据Action

从上面代码可以看出,Create.cshtml页面会把数据提交给当前页面对应的Controller和Action,因此我们就在CompanyController下写处理提交的数据的Action。代码如下:

1
[httpPost] 2 [ValidateAntiForgeryToken] 3 public ActionResult Create([Bind(Include = FirstName,LastName,Sex,rating")] Worker worker) 4 { 5 try 6 { 7 if (ModelState.IsValid) 8 { 9 db.Workers.Add(worker); 10 db.SaveChanges(); 11 return RedirectToAction(Index"); 12 } 13 } 14 catch (DataException /* dex */) 15 { 16 ModelState.AddModelError("unableToSave",Unable to save changes.Try again,and if the problem persists see your system administrator.17 } 18 return View(worker); 19 }
注意,之前我们已经写了一个Create Action用来进入添加页面,这里的Create不是修改前面的Create。而是新建了一个Action。

第1行在这个Action前加[HttpPost]表示只有以Post方法请求Create Action的时候才会调用这个Action。

第2行ValidateAntiForgeryToken依然是为了防止跨站请求伪造攻击而写的代码。

第3行Action的参数是以worker实例传递的。也就是说Create.cshtml提交的4个值被赋值给work然后把worker传递给Create作为参数。而这个参数前面的[Bind(Include = "FirstName,Rating")]是为了防止过多提交(overposting)攻击的。从Create.cshtml的代码可以知道,这个页面只会提交4个值。而黑客可以有办法通过这个页面提交更多的值给当前Action,而这些多出来的值也会存在worker实例中被添加到数据库,这无疑是危险的。因此[Bind(Include = "")]就限定了不管你提交多少值,我这个Action里只接受"FirstName,Rating"这4个值。保证了页面的安全性。

第7行ModelState.IsValid表示提交的数据是否有效。比如对于一个类型为数字的属性必须提交一个数字才算是有效。如果提交的数据有效则保存数据并且将页面跳转回Index.cshtml。

第16行ModelState.AddModelError()函数可以给Model添加一条错误信息,函数的第一个参数是key,用于查找这个错误信息,第二个参数是错误信息的具体内容。这个错误信息可以在View中通过Html.ValidationMessage("unableToSave")来访问到。

查看结果

点击下图的"Add New Worker"链接

@H_301_15@

MVC5 + EF6 + Bootstrap3 (12) 新建数据

放空必填项或者输入不合法数据出现提示信息如下:

@H_301_15@

MVC5 + EF6 + Bootstrap3 (12) 新建数据

填入正确信息如下:

@H_301_15@

MVC5 + EF6 + Bootstrap3 (12) 新建数据

点击Submit按钮,成功添加数据后的结果如下:

@H_301_15@

MVC5 + EF6 + Bootstrap3 (12) 新建数据

本图文内容来源于网友网络收集整理提供,作为学习参使用,版权属于原作者。
@H_262_745@ 编程之家官方2群(满)

猜你在找的Bootstrap相关文章

@H_618_777@
BootStrapValidator可以用于完成基于BootStrap搭建的前端UI中的输入验证,由于本插件完全基于BootStrap因此可以和UI完美的融合在一起。下面直接上图,看看完成后的结果:
@H_618_777@
顶求网首页是一个web2.0博客类的网站首页,在该网站中用户可以发表博客,也可以推荐图书给其他用户。所以,在首页中主要分三个板块——文章、图书、用户。另外,网站的头部和尾部还要有导航(navigato
@H_618_777@
在视窗足够大的时候是没有任何问题的,但是当拖动改变视窗的大小后会发现布局又变乱了,这个问题困扰了我许久,最后通过分析bootcss的源码我发现该网站在所有使用affix的元素的class中都添加了'h
@H_618_777@
BootStrap中的tabs控件以其简单易用而很受广大开发者的欢迎。但是,它的样式比较单一,如何才能在其原有的基础上做出更加美观的效果呢,我一直在虑这个问题。另外,Bootstrap中的tabs必
@H_618_777@
先看看劳动成果 布局 左右各一半(col-md-6) 左侧登录框占左侧一半的10/12 右侧是登录系统的注意事项 使用到的BootStrap元素 well 输入框组(input-group) 按钮(b
@H_618_777@
先吐槽一下Thinkphp3.1版的分页样式,然看起来也很简单大方,但是所有的页码全是使用简单的数字,之间的空隙比较小,不大容易点,还有那个“前5页”和“后5页”显得有点多余,因为点击当前显示第一页
@H_618_777@
在做WEB开发的时候我们经常会遇到分页的处理,如果在PC上显示网页的话,使用传统的分页是可以接受的。那么,当我们为手机或其他移动端设计界面的话,使用分页未免有些笨拙和难以使用,这时候我们可以使用在单页
@H_618_777@
为了和文章分类部分的样式进行区分,我决定自己动手写一个具有其他样式的分类标签集。刚好看到豆瓣读书板块的首页中的图书分类标签还不错,于是决定自己写一个类似的样式。首先是HTML代码部分: 可以看到图书分

MVC5 + EF6 + Bootstrap3 (12) 新建数据

微信公众号搜 "程序精选"关注

大佬总结

以上是大佬教程为你收集整理的MVC5 + EF6 + Bootstrap3 (12) 新建数据全部内容,希望文章能够帮你解决MVC5 + EF6 + Bootstrap3 (12) 新建数据所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:12356bootstrapbootstrap3efef6mvcmvc5数据新建
猜你在找的Bootstrap相关文章
其他相关热搜词更多
phpJavaPython程序员load如何string使用参数jquery开发安装listlinuxiosandroid工具javascriptcap