一.HtmlHelper、MVC快速增删改查
MVC
在MVC里面请求首先到控制器--》然后
-->数据库数据放在APP_DATE文件夹里,
--》js、css文件放在content文件夹里
--》控制器放在Controllers里,控制器要以controller结尾
控制器下面的所有方法都称为action
2)webform跟 aspnet MVC:区别请求的地址不一样了
MVC请求的是控制器下面的action
webform:aspx页面或者是一般处理程序
--》a标签
<%:html.ActionLink(显示的文本,action,控制器,参数,属性) %>
<%:Html.ActionLink("首页","/home/index",new {name="shit"},new {id="fuck",style="color:red",@class="add"}) %>
<a class="add" href="/home/home/index?name=shit" id="fuck" style="color:red">首页</a>
-->文本框 <%:html.TextBox("id") %>
生成一个html文本框标签并且id、name的值都是这里赋的“id”
-->radioButton
<%:Html.RadioButton("sex",1,true) %>男
<br />
<%:Html.RadioButton("sex",2,true) %>女
<%:html.RadioButton(‘name‘,1,true) %>
把‘name’设为一样的就是一组
-->下拉框
<%:Html.DropDownList("key")%>//前台代码
//view代码
ViewData["city"] = new List<SelectListItem>(){
new SelectListItem(){Selected=false, Text="北京", Value="1"},
new SelectListItem(){ Selected=false, Value="2", Text="广东"},
new SelectListItem(){Selected=false, Text="上海", Value="3" }
};
后台要new一个ViewData["key"]=NEW LIST<> ViewData的键要和前台的DropDownList("key")相同
3)扩展方法
如果直接返回string 那么前台页用<%: %>显示渲染出来的就是经过encod编码之后的,<>都会被编码成 > <,这样的好处是可以防XSS跨站脚本攻击
那么我们要返回一个html字符串就会被原样的输出,解决方案:可以返回MVCHtmlString或HtmlString
三要素
--》静态类、静态方法、this
//扩展方法的三大要素
//静态 类、静态方法、this
public static class MyHelperMethod { /// <summary> /// 没有解决= :编码的问题的扩张方法 /// 直接返回的话前台页用<%:html.... %>的时候:会对返回的字符进行编码,会把<>分别编译成>和<我们返回的html代码就会被浏览器渲染出来 /// /// </summary> /// <param name="helper"></param> /// <param name="str"></param> /// <returns></returns> public static string GetMyHtml(this HtmlHelper helper, string str) { return string.Format("<span>{0}</span>", str);// } /// <summary> /// 返回mvchtmlstring解决对:编码的问题 /// </summary> /// <param name="helper"></param> /// <param name="str"></param> /// <returns></returns> public static MvcHtmlString GetMyMvcStrHtml(this HtmlHelper helper, string str) { //return string.Format("<span>{0}</span>", str);// return MvcHtmlString.Create(string.Format("<span>{0}</span>", str)); } /// <summary> /// 返回mvchtmlstring解决对:编码的问题 /// </summary> /// <param name="helper"></param> /// <param name="str"></param> /// <returns></returns> public static HtmlString GetMyHtmlLable(this HtmlHelper helper, string str) { //return string.Format("<span>{0}</span>", str);// return new HtmlString(string.Format("<span>{0}</span>", str)); }
Cache
一、Cache 缓存
首先缓存是改变网站性能的第一个手段,它是一种以空间换时间的技术,它是共享的,存在服务端的内存里,
缓存分为三种:
--》页面缓存
把整个页面都保存在缓存里面,一般用于一些访问量比较大、页面上的数据也不是经常更新变换的,比如说首页、一些新闻页面,视频页面,像一些CUD页面就没有必要用缓存了。
--》数据源缓存
数据源缓存针对于ObjectDataSuorce, 如果设定了这个控件的EnableCache=true,那么绑定在这个ObjectDataSuorce上的数据就会被保存到缓存里,在缓存失效时间里不会去调数据库
数据源缓存不灵活,
--》自定义缓存
我们自己通过Cache["key"]="dsdas"这种方式来定义的,
那么缓存的好处就是提高用户体验,提高网站的性能,同时缓存也有缺点,一个是占用服务端资源,一个是会产生“脏数据”,当我们把数据保存在缓存里面的时候,在缓存失效时间内如果数据库的数据发生了改变,那么这时候用户在访问服务端就是从缓存里取数据就是没有更新的旧数据,解决这个问题的方法就是建立缓存依赖,缓存依赖又分为两种
1)文件缓存依赖
文件缓存依赖是通过CacheDependency cDep = new CacheDependency(filePath);这个类来实现的
它会时刻的监视这个文件,如果文件一修改那么就让绑定的那个缓存过期
2)数据库缓存依赖
数据库缓存依赖其内部是通过触发器来实现的,首先它会创建一个表,这个表里有三个字段,一个字段保存缓存的那张表的名字,一个是count一旦这张表进行了增删改操作count就+1,那么这个触发器在缓存的这张表进行增删改的时候触发,在这个触发器里调用了一个存储过程,这个存储过程就是对count字段自加1,那么在设置了pollTime="15000"这个以后,每隔这个时间段就会检查这张表里的count字段,看这个字段有没有发生改变,已发生改变就证明那张缓存的表发生了增删改操作,那么这个缓存就会立马失效,这种缓存依赖效率很低
数据库缓存依赖需要在数据库注册表
1.使用C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727中的aspnet_regsql.exe:
注册:aspnet_regsql -S . -E -ed -d 数据库名 -et -t 表名
删除:aspnet_regsql -S . -E -d 数据库名 -dt -t 表名
取消数据库缓存依赖: aspnet_regsql -S . -E -dd 数据库名
数据库名 列出已注册表:aspnet_regsql -S . -E -d 数据库名 -lt
2.配置web.config
<system.web>
<caching>
<sqlCacheDependency enabled="true">
<databases>
<add name="GSSMS" connectionStringName="conStr2" pollTime="15000"/>
</databases>
</sqlCacheDependency>
</caching>
3.数据库依赖对象
SqlCacheDependency cDep =
new SqlCacheDependency("GSSMS", "Students");
二、缓存的运行原理
浏览器发一个请求过来,当走到请求管道的第6个事件的时候就会获取以前处理过的缓存处理结果,看下这个请求的数据页面有没有被缓存,如果以前缓存了,那么在第7个事件获取缓存完毕之后就会立马返回,不会再处理请求了
MVC3客户端验证
MVC客户端验证
@*如果使用的是mvc2 一定要再前端启动客户端校验*@
@{ Html.EnableClientValidation(); }
要使用客户端验证,必须引入JS脚本支持
MicrosoftAjax.js
MicrosoftMvcValidation.js
添加语句
<% Html.EnableClientValidation(); %>(MVC3中默认开启)
.NET 框架中的System.ComponentModel.DataAnnotations命名空间包括了众多可为你所用的内置验证特性,介绍用的最多的其中的四个:[Required], [StringLength], [Range], 和
[RegularExpression]。
定义自己的定制验证特性,然后应用它们。你可以通过继承自System.ComponentModel.DataAnnotations命名空间中 的ValidationAttribute基类,定义完全定制的特
性。
--》给需要验证的对应的实体的属性加上特性
----------------------------实体类
[StringLength(10,ErrorMessage = "*最大长度是10")]//字符串的长度的校验 [Required(ErrorMessage = "*哥这是必填项....")]//必填的特性 public string TName { get; set; } [RegularExpression(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$",ErrorMessage = "*爷,得输入一个邮箱,知道邮箱吗?")]//正则表达的校验 public string Mail { get; set; } //数字范围校验 [Range(10,100,ErrorMessage = "只能是10到100才行!")] public int Age { get; set; }
--------------------------------前端
@using (Html.BeginForm()) { @Html.ValidationSummary(true) <fieldset> <legend>UserInfo</legend> <div class="editor-label"> @Html.LabelFor(model => model.Name) </div> <div class="editor-field"> @Html.EditorFor(model => model.Name) @Html.ValidationMessageFor(model => model.Name) </div> <div class="editor-label"> @Html.LabelFor(model => model.Emial) </div> <div class="editor-field"> @Html.EditorFor(model => model.Emial) @Html.ValidationMessageFor(model => model.Emial) </div> <p> <input type="submit" value="Create" /> </p> </fieldset>
---》改变错误提示文字的样式
生成网页之后,右键查看网页源代码,找到显示错误提示信息的span标签---可以看到这个用来显示提示信息的span标签应用了一个类样式field-validation-valid,那么我们就可以在css添
加这个类样式,改变它的样式了
<input class="text-box single-line" data-val="true" data-val-length="爷,最多只能输入10个" data-val-length-max="10" data-val-required="*哥,这是必填的
!!" id="Name" name="Name" type="text" value="" /> <span class="field-validation-valid" data-valmsg-for="Name" data-valmsg-replace="true"></span>
MVC隐式异步提交
--》引用相应的Javascript文件
<script src="../../Scripts/jquery.validate.unobtrusive.js" type="text/javascript"></script>
隐式异步提交很好的实现了js和html的分离
<form action="/Ajax/GetDate" method="post" data-ajax="true" data-ajax-confirm="大爷,看好了哦!" data-ajax-method="post" data-ajax-mode="replace" data-ajax-
update="#showTime" data-ajax-success="ShowMsg">
<input type="submit" name="name" value="click me" />
</form>
<div id="showTime">
</div>
Ajax Option 对应
AjaxOptionsHTML attribute
Confirm data-ajax-confirm
HttpMethoddata-ajax-method
InsertionModedata-ajax-mode *
LoadingElementDurationdata-ajax-loading-duration **
LoadingElementIddata-ajax-loading
OnBegindata-ajax-begin
OnCompletedata-ajax-complete
OnFailuredata-ajax-failure
OnSuccessdata-ajax-success
UpdateTargetIddata-ajax-update
Urldata-ajax-url