ASPNet MVC开发基础学习笔记Word下载.docx

上传人:b****3 文档编号:6841022 上传时间:2023-05-07 格式:DOCX 页数:14 大小:1.02MB
下载 相关 举报
ASPNet MVC开发基础学习笔记Word下载.docx_第1页
第1页 / 共14页
ASPNet MVC开发基础学习笔记Word下载.docx_第2页
第2页 / 共14页
ASPNet MVC开发基础学习笔记Word下载.docx_第3页
第3页 / 共14页
ASPNet MVC开发基础学习笔记Word下载.docx_第4页
第4页 / 共14页
ASPNet MVC开发基础学习笔记Word下载.docx_第5页
第5页 / 共14页
ASPNet MVC开发基础学习笔记Word下载.docx_第6页
第6页 / 共14页
ASPNet MVC开发基础学习笔记Word下载.docx_第7页
第7页 / 共14页
ASPNet MVC开发基础学习笔记Word下载.docx_第8页
第8页 / 共14页
ASPNet MVC开发基础学习笔记Word下载.docx_第9页
第9页 / 共14页
ASPNet MVC开发基础学习笔记Word下载.docx_第10页
第10页 / 共14页
ASPNet MVC开发基础学习笔记Word下载.docx_第11页
第11页 / 共14页
ASPNet MVC开发基础学习笔记Word下载.docx_第12页
第12页 / 共14页
ASPNet MVC开发基础学习笔记Word下载.docx_第13页
第13页 / 共14页
ASPNet MVC开发基础学习笔记Word下载.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

ASPNet MVC开发基础学习笔记Word下载.docx

《ASPNet MVC开发基础学习笔记Word下载.docx》由会员分享,可在线阅读,更多相关《ASPNet MVC开发基础学习笔记Word下载.docx(14页珍藏版)》请在冰点文库上搜索。

ASPNet MVC开发基础学习笔记Word下载.docx

  当点击确定后,弹出对话框,选择带红色框框的模板即可。

  新建成功后,会发现解决方案下有许多文件夹,大致的文件及说明如下:

  进行项目生成解决方案,开始执行(不调试)会发现解决我的第一个MVC项目竟然是这样的。

好神奇的感觉啊~,如下:

  看不懂?

没有关系,这只是相关于微软提供的一个基本的Demo。

打开文件,会发现其是很简单的。

一看就懂。

当然,VS2012自带可以预览网页效果的工具--PageInspector。

就同Java用MyEclipse自带的功能一样,简单方便且功能还算强大。

  平时做三层架构的项目时,调试一个页面时,我们经常要干的事就是输入网址,网址后缀名都会带一个index.aspx,而MVC的网站却好像打开一个文件的目录?

而没有具体到哪个页面一样,感觉是不是总觉得少了点什么?

MVC的工作模式其实是这样的:

  有人觉得奇怪,为什么地址不是具体的页面(如index.aspx),但最后却显示的index页面的内容?

这个是因为URL被重写了!

.ASP.NET中叫做UrlRouting,对应的程序集是System.Web.Routing。

字面意思是路由,你懂的。

  三、分析第一个Demo

 我们来分析一下,我们用VS2012建项目时的第一个Demo【打开VS2012,按照上面方法新建一个项目,即会产生这些文件,实际开发中将会被删除】。

  打开index.cshtml页面时,我们会发现如下代码【见黄色底纹部分】:

复制代码

1@{

2ViewBag.Title="

主页"

;

3}

4@sectionfeatured{

5<

sectionclass="

featured"

>

6<

pclass="

content-wrapper"

7<

hgroupclass="

title"

8<

h1>

@ViewBag.Title.<

/h1>

9<

h2>

@ViewBag.Message<

/h2>

10<

/hgroup>

11<

p>

12若要了解有关ASP.NETMVC的详细信息,请访问

13<

ahref="

title="

ASP.NETMVCWebsite"

14该页提供<

mark>

视频、教程和示例<

/mark>

以帮助你充分利用ASP.NETMVC。

15如果你对ASP.NETMVC有任何疑问,请访问

16<

ASP.NETMVCForum"

我们的论坛<

/a>

17<

/p>

18<

19<

/section>

20}

  再来看看Controller里面的HomeController类和页面之间的关系,如下:

  这点可以说明View是经过Controller的。

  再来看看Global.asax页面和App_Start目录下的RouteConfig.cs。

  程序开始时,调用了RouteConfig的RegisterRouters方法,此方法包含的内容如上,注意调用的MapRoute方法

1routes.MapRoute(

2name:

"

Default"

3url:

{controller}/{action}/{id}"

4defaults:

new{controller="

Home"

action="

Index"

id=UrlParameter.Optional}

5);

  把上面的URL填充,会发现,URL为(id值为空):

"

Home/Index/"

  再看看我打开的网站URL:

,有没有发现十分相似的地方?

对喽!

在ASP.NETMVC默认的视图引擎(WebFormViewEngine)下,views是按如下路径访问的:

    /Views/{Controller}/{Action}.aspx

  So,MVC程序的运行整个流程就明朗起来:

  ASP.NETMVC应用程序运行时,Application_Start()方法被调用,此方法又调用了RouteConfig类中的RegisterRoutes()方法,RegisterRoutes()方法创建了路由表。

  如上面提及的代码,路由第一段URL映射到一个控制器名字,第二段URL映射到一个动作,第三段映射到一个参数叫Id.

  路由映射以下这些参数:

    controller=Home    Home表示默认控制器

    action=Index      Index表示IndexAction

    id="

          ID表示Index()参数,如下代码,没参数,所以ID="

  当请求URLhttp:

//localhost/home/index/时,以下代码HomeController.Index()将会被执行:

1publicActionResultIndex()

2{

3ViewBag.Message="

Hello,WhyShang,快速启动你的ASP.NETMVC应用程序。

4returnView();

6}

  至此对AMVC4有一个基本的理解。

原理明白了,才能更好的学习。

明天的生活才会更美好!

ASP.NetMVC开发基础学习笔记:

二、HtmlHelper与扩展方法

一、一个功能强大的页面开发辅助类—HtmlHelper初步了解

1.1有失必有得

  在ASP.NetMVC中微软并没有提供类似服务器端控件那种开发方式,毕竟微软的MVC就是传统的请求处理响应的回归。

所以抛弃之前的那种事件响应的模型,抛弃服务器端控件也理所当然。

  但是,如果手写Html标签效率又比较低,可重用度比较低。

这时,我们该怎样来提高效率呢?

首先,经过上篇我们知道可以通过ViewData传递数据,于是我们可以写出以下的Html代码:

<

inputname="

UserName"

type="

text"

value="

%:

ViewData["

]%>

/>

  虽然以上代码可以解决问题,但是效率还是比较低,特别是在列表集合项较多的时候,工作量会比较大。

那么,还有木有一种更好的方式呢?

别急,微软已经为我们想好了策略。

微软为开发人员快速开发前台页面提供了丰富的HtmlHelper的辅助类,辅助我们快速开发前台页面,也提供了可扩展的接口,前台页面的标签可以可以做到高度可重用。

1.2HtmlHelper初窥

  我们可以通过在页面中通过Html.XXX来实现快速的Html标签编辑,并且可以方便地进行数据绑定。

Html.Raw("

Hello,IamHtmlHelper!

)%>

  那么,为什么可以在页面中调用Html.XXX方法呢?

通过ILSpy反编译ViewPage页,我们可以看到原来在ViewPage下有一个HtmlHelper类型的属性-Html。

(这下终于知道,为什么可以在页面中使用Html.xxxx()了)

  那么这个HtmlHelper类又是一个什么类型的大神呢?

继续反编译查看,在System.Web.Mvc命名空间下的HtmlHelper类型如下图所示,经过MSDN大神的讲解,HtmlHelper支持在视图中呈现HTML控件。

那我们看看在此类中有木有传说中的TextBox、CheckBox的方法呢?

经查看,木有。

  那么,我们为什么可以在页面中使用Html.TextBox()方法呢?

这里就涉及到一个叫做“扩展方法”的东东了,HtmlHelper类的扩展方法在System.Web.Mvc.Html命名空间中。

这些扩展添加了用于创建窗体、呈现HTML控件、呈现分部视图、执行输入验证等功能的帮助器方法。

那么,有关如何自定义扩展方法请参阅本文第三部分,这里先卖个关子,暂不介绍。

1.4为什么使用HtmlHelper?

  思考这样一个场景:

我们的项目第一个版本中的路由规则是这样的{controller}/{action}/{id},于是我们项目中所有的<

a>

标签所指向的都是以刚刚的规则命名的href(例如:

ahref='

Home/User/1'

)。

但是在第二版中,我们的路由规则也会变成了{controller}-{action}-{id},那么我们刚刚为超链接所设置的href便都无法正常访问了。

这时,我们需要进行替换,单个替换或批量替换(例如改为:

Home-User-1'

),虽然也可以解决问题,但是无疑增加了工作量,效率很低。

  那么,怎样来屏蔽这种变化所带来的不便呢?

这里,通过使用HtmlHelper为我们提供的ActionLink标签,便可以解决这个问题。

因为HtmlHelper是从服务器端自动帮你生成a标签,因此所生成的href会遵循目前的路由规则,也就帮我们屏蔽了变化,提高了工作效率。

二、没有服务器控件也能干大事—HtmlHelper重要方法介绍

  PS:

这里的实例均没有加<

%%>

或@符号,要运行请自行加上。

  

(1)ActionLink与RouteLink

Html.ActionLink("

这是一个连接"

"

)带有QueryString的写法Html.ActionLink("

new{page=1},null)Html.ActionLink("

new{page=1})有其它Html属性的写法Html.ActionLink("

new{id="

link1"

})Html.ActionLink("

null,new{id="

})QueryString与Html属性同时存在Html.ActionLink("

new{page=1},new{id="

new{page=1},new{id="

})

  其生成的结果为:

/"

这是一个连接<

带有QueryString的写法<

/?

page=1"

有其它Html属性的写法<

Length=4"

id="

QueryString与Html属性同时存在<

id="

  RouteLink在用法几乎与ActionLink一致,这里就不再介绍,详情请参与MSDN;

  

(2)TextBox与TextArea

  ①TextBox

Html.TextBox("

input1"

)Html.TextBox("

input2"

Model.CategoryName,new{@style="

width:

300px;

})Html.TextBox("

input3"

ViewData["

Name"

],new{@style="

})Html.TextBoxFor(a=>

a.CategoryName,new{@style="

inputid="

name="

style="

Beverages"

value="

CategoryName"

style="

Electronic"

  ②TextArea

Html.TextArea("

input5"

Model.CategoryName,3,9,null)Html.TextAreaFor(a=>

a.CategoryName,3,3,null)

textareacols="

9"

name="

rows="

3"

Electronic<

/textarea>

rows="

  这里可以看到,我们可以使用强类型来生成Html标签,例如:

Html.TextBoxFor(a=>

}),这里的CategoryName就是某个类型的属性。

  (3)CheckBox

Html.CheckBox("

chk1"

true)Html.CheckBox("

new{@class="

checkBox"

})Html.CheckBoxFor(a=>

a.IsVaild,new{@class="

  其生成的结果为:

inputchecked="

checked"

type="

checkbox"

true"

hidden"

false"

inputclass="

class="

IsVaild"

  (4)DropDownList

Html.DropDownList("

ddl1"

(SelectList)ViewData["

Categories"

],"

--SelectOne--"

)Html.DropDownListFor(a=>

a.CategoryName,(SelectList)ViewData["

new{@class="

dropdownlist"

selectid="

optionvalue="

--SelectOne--<

/option>

1"

Beverages<

2"

Condiments<

optionselected="

selected"

Confections<

4"

DairyProducts<

5"

Grains/Cereals<

6"

Meat/Poultry<

7"

Produce<

8"

Seafood<

/select>

selectclass="

  (5)RadioButton

男<

Html.RadioButton("

Gender"

"

true)%>

女<

Html.RadioButton("

false)%>

  其生成的代码为:

radio"

  (6)Encode与Raw

  Encode会将内容进行编码话,因此,如果你的内容中含有Html标签的话那么会被解析成特殊字符,例如:

Html.Encode("

哈哈<

&

amp;

lt;

p&

gt;

哈哈&

/p&

  这里主要是为了防止XSS攻击和恶意脚本,因此在MVC中,默认的<

%>

就实现了<

Html.Encode()%>

但是,某些时候如果我们需要输出Html或JavaScript内容的字符串,这时我们可以使用HtmlHelper为我们提供的其他方法。

例如我们要输出刚刚那句话,我们可以如下使用:

  在HtmlHelper中还提供了许多的扩展方法供我们方便创建Html,比如:

BeginForm、EndForm等。

关于其他的方法介绍,请自行搜索,这里不再一一赘述。

三、随时随地我也能扩展—HtmlHelper扩展方法简介

3.1扩展方法简介

  借助MSDN的介绍:

“扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。

”扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。

我们可以回到第一部分对HtmlHelper的扩展类-InputExtension类上,它是对于HtmlHelper的扩展,那么怎么鉴别它是HtmlHelper的扩展呢?

3.2扩展方法的三要素

  

(1)静态类

  可以从上图看出,InputExtension首先是一个静态类;

  

(2)静态方法

  既然是静态类,那么其所有的方法必然都是静态方法,例如:

publicstaticMvcHtmlStringCheckBox();

  (3)this关键字

  可以从方法名定义中看出,第一个参数都是thisHtmlHelperhtmlHelper,代表对HtmlHelper类的扩展;

3.3自定义扩展方法

  

(1)在Models文件夹下新建一个类,取名为:

MyHtmlHelperExt

  

(2)将MyHtmlHelperExt设置为static,并写入以下的一个静态方法:

publicstaticHtmlStringMyExtHtmlLabel(thisHtmlHelperhelper,stringvalue){returnnewHtmlString(string.Format("

spanstyle='

font-weight:

bold;

'

Hello-{0}-End<

/span>

value));

}

  (

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2