本人刚开始学asp.net mvc3,以下是学习笔记:
1、表单
表单是包含输入元素的容器,其中包含按钮、复选框、文本框等元素。
action和method(传送并提交给服务器)看下面代码:
<form action="http://www.google.com/search">
<input name="a" type="text" />
<input type="submit" value="Search!" />
</form>
form没有method标签。当发送信息时,method特性可以告知浏览器使用的是HTTP POST 还是GET。现在没有method,很多人会认为默认的是POST,但是不是,默认方法仍是GET。
<form action="http://www.google.com/search" method="get">
<input name="a" type="text" />
<input type="submit" value="Search!" />
</form>
假设用户搜索 good 则跳转的URL为:http://www.google.com/search?q=good
GET还是POST方法?
GET方法不会改变服务器上的状态,客户端可以向服务器端重复的发送Get请求而不会产生负面影响。代表的事幂等操作和只读操作。可以在电子邮件或者网页中将URL当作超链接使用。
POST方法通常会改变服务器的状态,重复提交可能会产生不良的后果。post可以用来提交信用卡交易信息、向购物车添加、修改密码等。
在web程序中,get用于读操作,post用于写操作。
2、HTML辅助方法
<form action="/Home/Search" method="get">
<input name="a" type="text" />
<input type="submit" value="Search" />
</form>
上面的代码可以改写成:(HTML辅助)
@using (Html.BeginForm("Search","Home",FormMethod.Get)){
<input name="a" type="text" />
<input type="submit" value="Search" />
}
html.BeginForm 解析为:
<form action="http://www.google.com/search" method="get">//或者post
html.ValidationSummary辅助方法可以用来显示ModelState字典中所有验证错误的无序列表,使用布尔类型(true)来告知辅助方法排除属性级别的错误。
添加输入元素
html.TextBox(和html.TextArea)
@html.TextBox("title",model.title)生成如下html:
<input id="title" name="title" type="text" value="xxx"/>
@html.TextArea("text","hello<br/> world")生成如下html:
<textarea cols="20" id="text" name="text" rows="2">hello <br/>world></textarea>
@html.TextArea("text","hello<br/> world",10,80,null)生成如下html:
<textarea cols="80" id="text" name="text" rows="10">hello <br/>world></textarea>
html.Label
@html.Label("GenreId")生成如下html:
<label for="GenreId">Genre</label>//Genre是辅助方法询问运行时是否有GenreId的可用模型元素时,运行从装饰Album模型的DisplayName特性中获取的。
label的作用是为其他输入元素显示附加信息,这样可以为用户提供人性化的界面,从而增强应程序的可访问性。label的for特性应该包含相关的元素id,呈现的界面可以利用label的文本为用户提供相关输入的更好描述。另外一点,如果用户单击label,那么浏览器就会把焦点传递给相关的输入控件,对于复选框和单选按钮特别有用,为用户提供更大的单击区域。
html.DropDownList(和html.ListBox)
两个标签都返回<select/>元素。DropDownList允许单项选择,ListBox支持多项选择。
通常select元素有两个作用:1展示列表 2 展示字段当前值。例子:
ViewBag.ArtistId = new SelectList(db.Artists, "ArtistId", "Name", album.ArtistId);
html.ValidationMessage
添加一条错误:ModelState.AddModelError("Title","What a terrible name!");
@html.ValidationMessage("Title")生成如下html:
<span class="field-validation-error" data-valmsg-for="Title" data-valmsg-replace="true">
What a terrible name!</span>
@html.ValidationMessage("Title","What a terrible name!")生成如下html:
<span class="field-validation-error" data-valmsg-for="Title" data-valmsg-replace="false">
What a terrible name!</span>
强类型辅助方法:
在原有的基础上加上一个for后缀,并传入一个lambda表达式MSDN--lambda表达式来渲染指定的模型属性。
上述的例子可以写成下面:
@html.LabelFor(m=>m.GenreId)
@html.DropDownListFor(m=>m.GenreId,ViewBag.Genres as SelectList)
@html.TextBoxFor(m=>m.Title)
@html.ValidationMessageFor(m=>m.Title)
扩展的其他辅助方法:
@html.Hidden("wizardStep","1")生成如下html:
<input id="wizardStep" name="wizardStep" type="hidden" value="1"/>
@html.HiddenFor(m=>m.WizardStep)
html.Password
@html.Password("pwd")生成如下html:
<input id="pwd" name="pwd" type="password" value="" />
@html.PasswordFor(m=>pwd)
html.RadioButton
@html.RadioButton("color","Blue",true//或者没有这一项)
<input id="color" name="color" type="radio" value="Blue" checked="checked"/>
@html.RadioButtonFor(m=>m.Color,"1") //Blue
html.CheckBox//唯一一个渲染两个输入元素的辅助方法。
@html.CheckBox("aaa")
<input id="aaa" name="aaa" type="checkbox" value="true" />
<input name="aaa" type="hidden" value="false" />
html.ActionLink和html.RouteLink
@html.ActionLink("link text","index","shopping",new{id=1}//有些不用传递参数,null)//链接shoppingController控制器的index操作 并传入参数id=1。
@html.RouteLink("link text",new{action="shopping"})相比之下,此方法不用接受控制器名称和操作名称。
URL辅助方法有action content routeUrl3个(不详说)
html.Partial 和html.RenderPartial
aaa为分部视图
@html.Partial("aaa")
@{html.RenderPartial("aaa")}
两条输出的内容相同,但是第一个要更加的方便,第二个有更好的性能(需要大量的重复调用才能看出来).
html.Action 和html.RenderAction//类似于Partial和RenderPartial这里不详说
小结:
辅助方法有利于我们程序员更好的编程!