方式: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. mysql的分库分表

    1 什么是分库分表 这里讨论的情况是一台机器上对应一个数据库. 分库的对象是表,分表的对象是行.分库是说把属于同一个模块的相关性很高的表放在同一个数据库中.分表是说把同一个表的的行分成多个子表,把各个 ...

  2. php异步任务处理: gearman

    Gearman是一个用来把工作委派给其他机器.分布式的调用更适合做某项工作的机器.并发的做某项工作在多个调用间做负载均衡 准备软件包 gearmand-1.1.12.tar.gz gearman-1. ...

  3. Oracle | PL/SQL Check约束用法详解

    1. 目标 实例讲解在Oracle中如何使用CHECK约束(创建.启用.禁用和删除) 2. 什么是Check约束? CHECK约束指在表的列中增加额外的限制条件. 注: CHECK约束不能在VIEW中 ...

  4. Java for LeetCode 130 Surrounded Regions

    Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is captured ...

  5. VMware和Centos系统安装

    1.Linux发行版的选择 2.vmware创建一个虚拟机(centos) 3.安装配置centos7 4.xshell配置连接虚拟机(centos) 选择性 pc可以选择 -纯系统 Linux/wi ...

  6. hihocoder(第十周)二叉树(前序中序推后续)递推实现

    题目 : 后序遍历 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在参与过了美食节之后,小Hi和小Ho在别的地方又玩耍了一阵子,在这个过程中,小Ho得到了一个非常有意思 ...

  7. SQL语句编写注意问题

    下面就某些SQL语句的where子句编写中需要注意的问题作详细介绍.在这些where子句中,即使某些列存在索引,但是由于编写了劣质的SQL,系统在运行该SQL语句时也不能使用该索引,而同样使用全表扫描 ...

  8. nginx应用 突破高并发的性能优化

    摘自:http://www.cnblogs.com/kevingrace/p/6094007.html 在日常的运维工作中,经常会用到nginx服务,也时常会碰到nginx因高并发导致的性能瓶颈问题. ...

  9. ES6 Map数据结构

    Map JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键.这给它的使用带来了很大的限制. ES6 提供了 Map 数据结构.它类似于对 ...

  10. Smarty模板重点汇总

    Smarty模板重点回顾:1.功能:前后端分离:2.实现方法:通过使用Smarty的核心类来实现,利用display方法来读取模板文 件,用正则进行替换,替换完保存到临时文件,再将临时文件加载到当前页 ...