.net笔记之MVC

来源:互联网 发布:52单片机蓝牙硬件电路 编辑:程序博客网 时间:2024/05/02 04:28
2014.08.18
mvc开源的UI框架,简洁干净。企业应用广泛09年才出,更加接近请求处理响应原理。
vs2010 仅支持mvc2.0
VS2013,.net4.5
MVC应用程序分成三组件:视图,控制器,模型。
webForm开发方式:服务器端控件、ashx+html静态页+Ajax、ashx+html模板。


最底层都是asp.net管道模型,mvc可以使用更多样的视图引擎



2014.08.19
webForm是个前台后台假分离,继承的关系,耦合很强。
<p><%: this.DbData%></p>
mvc 选择基本模板,视图引擎可以选择aspx,razor等引擎,确定后会比较漫长。
app_data 安全的数据,防止数据泄露。app_start,Content放图片样式。
Controllers控制器。Models,scripts,Views.
先创建控制器。HomeController。所有控制器必须以Controller结尾。是一个cs类,继承了Controller类,又继承自ControllerBase实现了IController接口。必须是非静态类。
mvc下请求的是Home控制器下的index方法而不是一个页面。这个方法返回了某个页面而已。
App_start可注册路由规则。
每个控制器都对应视图文件夹下的一个同名视图文件夹,控制器下面的方法对应视图文件夹下的页面。,可在方法里加入viewDate["key"]="value"来传递数据


2014.08.21
MVC用户注册案例:
UserInfoController.cs
Index(){
 获取数据,并把数据传到前台页面。
datatable dt=....
ViewData["dt"]=dt;
return view();
}
视图中Index.aspx<%DataTable dt=(DataTale)ViewData["dt"]%>
在routeConfig.cs中修改默认路由(不是Home了)
注:不应讲dataTable这种弱类型的数据传到view中,应该传递.出来这种的强类型数据。比如类对象。


#region区域可折叠,写注册页面。


在UserInfoController中添加
public ActionResult Add(){}
public ActionResult ProcessAdd(){int Age=int.Parse(collection["age"]??"0")
return RedirectToAction("")
return Content("ok");}
<from action="/UserInfo/ProcessAdd">


分层讲解:
View层。MVC没有提供控件。抛弃了之前的事件响应模型。
<a href="<%: url.Action("Index","UserInfo")%>"></a>
或者<%: Html.ActionLink()%>
DropDownList 使用ViewData["City"]=new List<SelectListItem>(new ...)集合,用控制器传给view <%: Html.DropDownList("City")%> City可自动装配
强类型视图:
在Model中加UserInfo类
先加Action Show(){对象userInfo}
在View中添加Model的引用<% UserInfo user=ViewData["UserInfo"] as UserInfo%>(强类型转换)
改进:return view("Show2")在Show2中直接<%: Model.UserName%>(实际上是ViewPage<TModel>)
可在控制器中添加ViewDate=UserInfo;
<%: Html.TextBoxFor(u=>u.userName)%>(强类型的HtmlHelper,自动装配)
冒号等号区别,等号会原封不动输出到后台,冒号会做些特殊符号的转换&gt,冒号可防止跨站脚本攻击
或用<%: Html.Raw("<p>")%ss>
或用<%: new HtmlString("<p>")%>


2014.08.22
扩展HtmlHelper方法:


public static string MyLabel(this HtmlHelper helper,string txt){return string.Format("<span>{0}</span>",txt);}
引用:<%:html.MyLabel%>,要先在view中引用那个model。可以改变命名空间为 System.Web.Mvc,就不需要手动引用了。
<%:Html.ActionLink("删除","Delete","UserInfo",new{Id=dataRow["Id"]},new{})%>
Public ActionResult Delete(int UId){...}
Action在执行之前,MVC框架会自动的奖请求中的数据装配到Action的参数里面去(Id)。
[HttpPost] [HttpGet]两种请求


Razor引擎:
.cshtml,@字符

建立Home控制器,添加Razor视图。
@{C#代码}
<P>@ViewData["key"]</p>(可自动闭合)
@for(int i...)
@if(...)
@{string str="<script>";<p>@html.Raw(str)</p> @str2.IsInt}


控制器:
Request获取请求数据。所有Action都有返回值ActionResult类(抽象类 ExecuteResult())
ActionResult派生类:ContentResult,EmptyResult,FileStrameResult



路由:
确定Controller,确定Action,确定其他参数。

路由模块解析请求的URL,根据路由规则解析。
App_Start里面的RouteConfig.cs里面来配置,早期是在Application_start里面配置。
下面是注册一条路由规则
routes.MapRoute(
name:"Default",url:"{controller}/{action}/{id}-{id2}",defaults:new{controller="Home",action="Index",id=UrlParameter.Optional},
contraints:new{约束。。},
namesspaces:new string[]{控制器命名空间的约束}
)
name是路由器的Key,一定不能重复。url是请求后台URL规则格式。可以指定多条路由规则,有顺序的。要注意!
可引用RouteDebug进行调试设置代码。
SEO,一个网址的URL层次不要超过三层。一般是localhost/频道/页面地址。需要指定路由规则
routes.MapRoute(
""
)


2014.08.25
MVC验证:
建Model:UserInfo.cs,
建控制器UserInfoController:
ActionResult Add()
post请求用Add(UserInfo userInfo){...}
建Razor视图,add.cshtml,
@using(Html.BeginForm(...))
在Model内在某个字段上方加[Required(ErrorMessage="*必填")],[StringLenth(5,ErrorMessage="...")],[Range(18,20)]
需引用Jquery校验包。
控制器内if(ModelState.Isvalid){若为True就校验成功}
web.config中可以设置全局是否关闭校验,或某个页面里单独设置@{Html.Enable...}
AJAX使用:
后台代码 ActionResult getdate(){return content(...)}
Razor页面:ajax请求的是Controller里面的Action,$.ajax({url:"/Ajax/getdate",type:"Post",success:fuction(data){
},data:"id=2&name=222"})
$.get("/Ajax/getData",{},function(data){alert(data)})
自带的Ajax请求。需引用ajax隐士的脚本。
@using(Ajax.GeginForm("getDate","控制器Ajax",new AjaxOptions(){confirm="你要提交哦啊么?",HttpMethod="Post",InsertonMode=...replace,UpdateTargetId="Result",Onsuccess="afterSuccess",LoadingElementId="loading"})){<div>,,,,用户名:}


Action和Result等四种过滤器:
模型,继承ActionFiterAttribute类,重写四个方法。

在控制器中使用标签:[MyActionFilter(Name="Index Action")]



0 0
原创粉丝点击