方式:1使用弱类型取,2,使用强类型,两者的差别在于view页面最上方声明的方式

 
如果使用弱类型接受来自控制器的数据,在view页面里完全不需要有任何的生命,数据可以从ViewData,ViewBag,TempData取得,在页面中可以通过@Model属性, 取得从Action传来的ViewData.Model数据模型。但是@Model数据类型将会是object,所以算是弱类型的传值方式。
 
如果使用强类型的话,必须在view页面第一行使用@model关键字引入一个view页面专用的数据模型
eg:
@model MvcApplication5.Models.LoginModel
 
@ViewBag.Title
使用这种方式有助于提升view的开发效率,因为可以使用智能提示功能。
-------------------------------
 
html helper就是用来辅助产生的HTML之用,在开发view的时候会面对许多html标签,处理这些会显得繁琐,为了降低view的复杂度,可以使用html辅助方法帮助产生一些html标签或内容,因这些html标签都有固定标准的写法,所以将其包装成html辅助方法,可让view开发更快速,也可以避免不必要的语法错误。

 
1,输出超链接
@Html.ActionLink("aaa","ActionName")
预设会链接到ActionName这个名称的action,由于没有指定控制器名称,因此指向的控制器将会与这次检视页面所属的控制器一样。
 
@Html.ActionLink("aaa","ActionName",“ControllerName”)
链接到指定控制器下的action
 
@Html.ActionLink("aaa","ActionName",new {id=123,page=5})
设定额外的RouteValue,可以在第三个参数传入object型别的数据
 
@Html.ActionLink("aaa","ActionName",null,new {@class="btnLink"})
当需要传入超链接额外的HTML属性时,可以将参数加在第四个参数上
注意:由于html标签里在套用css样式类别时会用到class属性名称,不过,在c#里class属于关键字并无法使用为匿名物件的属性,因此若要将其看为属性,则要在前面添加@跳转符号,这样才会正确编译。
此外,如果输出的html属性包含减号,如data-value属性,设定c#属性名称时必须将减号改成下划线替代,最后输出html属性时会自动变成减号。
 
使用Html.ActionLink()时,第一个参数为超链接的显示文字,此参数不可以输入空字符串,空白字符串或者null值,否则就会抛出TheValue cannot be null or empty.的例外。
 
但是如果我们要设定完全没有链接内容的时候,一般会是用在输出图片为主的超链接上,因为设计师想设计一个包含超链接的图片按钮,因此图片选择用a标签来输出,并通过css加上一个背景图
比如这种<标签a href="/home/index" class="lnkButton"></标签a>这样的格式输出是没法利用Html.ActionLink来做的,必须该用@Url.Action辅助方法才行
比如<标签a href="@Url.Action("ActionName")" class="lnkButton"></标签a>
 
@Html.RouteLink("回会员专区",new {type="default"})
@Html.RouteLink("回会员专区",new {type="default"},new {@class="back"})
输出结果如下
<标签a href="/Account/Login?type=default" class="lnkButton">回会员专区</标签a>
<标签a  class="back"  href="/Account/Login?type=default" class="lnkButton">回会员专区</标签a>
还可以指定路由表RouteTable中的路由名称,然后再加上额外的RouteValue参数
@Html.RouteLink("回会员专区",“Member”,new {})
@Html.RouteLink("回会员专区",“Member”,new {type="default"})
@Html.RouteLink("回会员专区",“Member”,new {type="default"},new {@class="back"})
 
2,输出表单
 
》》》》产生表单元素
eg:
@using(Html.BeginForm()){
 
<标签p>账号:@Html.TextBox("account")</标签p>
<标签p>密码:@Html.Password("password")</标签p>
}
 
输出的内容回是
<表单form action="/account/Login" method="post">
<标签p>账号:<标签input id="account" name ="account" type="text" value=""   /></标签p>
<标签p>密码:<标签input id="password" name ="password" type="password" value=""   /></标签p>
</表单form>
 
注意:当然我们也可以不适用@using,这样是可以确保表单标签会在using结尾输出表单结束标签,当然也可以在末尾使用@Html.EndForm()来关闭这个标签。但是beginform没法直接通过@输出,必须以c#语句的方式来执行。
eg:
@{Html.BeginForm("Abount","Home");}
@Html.TextArea("Date")
@Html.TextArea("MeMO")
<标签input type="submit"/>
@{Html.EndForm();}
 
@Html.BeginForm()预设输出的method是post,如果要设定get可以输入第三个参数
 
@using(Html.BeginForm(”Search","Home",FormMethod.Get)){
<标签p>账号:@Html.TextBox("account")</标签p>
}
 
如果要在表单上做上传功能,就必须在表单标签加一个enctype属性,且内容必须设定为multipe/form-data
,要通过Html.BeginForm辅助来新增额外的属性必须加上第四个参数,并传入一个匿名物件。
eg:
@using(Html.BeginForm("Upload","File",FormMethod.Post, new {enctype="multipart/form-data"})){
@Html.TextBox("File1","",new {type="file",size="25"})
<标签input type="submit"/>
}
输出内容是
<表单form action="/File/Upload" enctype="multipart/form-data" method="post">
<标签input type="file" id="File1"  name="File1" size="25" value=""/>
<标签input type="submit"/>
</表单form>
 
注意:html辅助方法并没有File方法,因此必须用TextBox来代替,并传入第三个参数将内建的type属性换成file即可。
拓展:如果要将表单送出的目标网址限定在特定的路由规则,可以用html.BeginRouteForm辅助方法指定路由名称eg:
@using("Inquiry",new {action="Index"}){}
 
》》》》》》模拟各种http动词(暂时没用到,以后再补充)
 
》》》》》》常用表单输入栏位
@Html.Password()用于产生密码栏位,
@Html.Hidden()用于产生隐藏栏位,
@Html.TextArea()用于产生多行文字的输入框,使用方式与html.textbox类似,但拥有较多的多载可以指定rows和column的值
@Html.DropDownList()用于产生下拉框
eg:@Html。DropDownList("List",ViewData["List"]as SelectList,"请选择")
 
@Html.listBox()用于产生多选的下拉式菜单,和上面的用法相似。
@Html.RadioButton()用于产生单选按钮(name,value,true[false])
@Html.CheckBox()用于产生选取方块,name,value
 
》》》》》》使用强类型别辅助方法
在原先的名称最后加上For,eg @Html.TextBoxFor()或@Html.LabelFor()这样有很多优点,不过最重要的是在view页面的最上方一定要用@model定义出这个页面的参考数据模型,如果没有声明的话就无法正常使用强类型辅助方法
eg:@Html.LabelFor(model => model.Name)
 
@Html.ValidationSummary()输出表单验证失败时的错误信息
@Html.ValidationMessageFor()用来输出当这个栏位发生输入验证错误时应显示的信息内容。

view如何从action中取得数据和 Html辅助方法的更多相关文章

  1. 一步步学习ASP.NET MVC3 (5)——View从Action中获得数据

    请注明转载地址:http://www.cnblogs.com/arhat 在上一章中,我们把Razor的模板技术给大家介绍了一下,当然模板中还有其他的知识点,这个以后我们还会继续讲解.本章我们主要讨论 ...

  2. 关于iOS去除数组中重复数据的几种方法

    关于iOS去除数组中重复数据的几种方法   在工作工程中我们不必要会遇到,在数组中有重复数据的时候,如何去除重复的数据呢? 第一种:利用NSDictionary的AllKeys(AllValues)方 ...

  3. php获取数组中重复数据的两种方法

    分享下php获取数组中重复数据的两种方法. 1,利用php提供的函数,array_unique和array_diff_assoc来实现 <?php function FetchRepeatMem ...

  4. ASP.NET MVC中如何以ajax的方式在View和Action中传递数据

    前言:写这篇随笔的时候,在url上漏写了斜线,找了好久错误,整个人都很不好.#我是猪系列 背景:之前介绍过一篇如何构建 MVC&AJax&JSon示例,这一篇单独讲解如何在View和A ...

  5. Struts2获取Action中的数据

    当我们用Struts2框架开发时,经常有要获取jsp页面的数据或者在jsp中获取后台传过来的数据(Action),那么怎么去获取自己想要的数据呢? 后台获取前端数据: 在java程序中生成要获取字段的 ...

  6. NHibernate 中删除数据的几种方法

    今天下午有人在QQ群上问在NHibernate上如何根据条件删除多条数据,于是我自己就写了些测试代码,并总结了一下NHibernate中删除数据的方式,做个备忘.不过不能保证囊括所有的方式,如果还有别 ...

  7. 总结NHibernate 中删除数据的几种方法

    今天下午有人在QQ群上问在NHibernate上如何根据条件删除多条数据,于是我自己就写了些测试代码,并总结了一下NHibernate中删除数据的方式,做个备忘.不过不能保证囊括所有的方式,如果还有别 ...

  8. 往redis中存储数据是利用pipeline方法

    在redis中保存数据时,保存和设置有效时间是分开写的话,如果中间出现的异常,这会导致数据永久有效,因此就可以采用pipeline方法. # 创建redis管道对象,可以一次执行多个语句 pipeli ...

  9. react在router中传递数据的2种方法

    概述 不传递数据叫什么单页面应用,渲染模块还需要http请求算什么单页面应用. 本文总结了react-router4中使用BrowserRouter时传递数据的两种方法,供以后开发参考,相信对其他人也 ...

随机推荐

  1. python中的特殊用法

    1 别名 from xxx import xxx as xxx;

  2. 关于BlockingQueue

    1 什么是BlockingQueue 2 BlockingQueue有什么用 3 ArrayBlockingQueue的用途 1 它是一个线程安全的队列 2 它是一个容量固定的队列 3 它为什么叫bl ...

  3. window窗口的各种宽高

    一 常用的宽高属性 在日常开发的时候,我们常常需要用到这几个高度信息.浏览器的视口高度和宽度,浏览器的卷动高度,正文内容的总高度等等信息,我在下图中列出了在工作中最常用的几个宽度和高度信息.并在本篇文 ...

  4. java基础之容器、集合、集合常用方法

    一.容器(Collection):数组是一种容器,集合也是一种容器 java编程中,装其他各种各样的对象(引用类型)的一种东西,叫容器 注意: 1.数组的长度是固定的 2.集合:长度不固定, 可以随时 ...

  5. 【linux】top更改排序顺序

    top更改排序顺序的方式有很多,这里介绍两个比较简单使用的. 1,快捷键: 大写M:根据内存排序,默认从大到小,大写R更改为从小到大排序 大写P:根据CPU使用排序,默认从大到小,大写R更改为从小到大 ...

  6. Java for LeetCode 137 Single Number II

    Given an array of integers, every element appears three times except for one. Find that single one. ...

  7. Machine Learning No.11: Recommender System

    1. Content based Problem formulation Content Based Recommendations: 2. collaborative filtering algor ...

  8. JAVA线程sleep和wait方法区别 代码

    package test; import java.util.Date; import java.util.Random; public class test { public static void ...

  9. debian下烧写stm32f429I discovery裸机程序

    需要安装openocd软件.如果已安装默认的openocd,需要先卸载系统默认的openocd(默认版本是0.5.0,版本太低),然后再安装. 在安装前需要安装libusb库文件: -dev libu ...

  10. HTML5实现中国象棋游戏(无人能敌)

    1. [代码][JavaScript]代码    var AI = AI||{}; AI.historyTable =   {};     //历史表  //人工智能初始化AI.init = func ...