MVC @Html控件
传统的Html元素不能和服务端数据进行绑定 HtmlHelper类提供了一系列的方法来生成Html元素 并可以实现与数据绑定在一起 然后生成Html
Html.BeginForm(actionName , controllerName , FormMethod , htmlAttribute)
创建一个表单
actionName 和 controllerName
这两个参数表示表单要提交到哪个controllerName下的哪个Action方法中
FormMethod
此参数是一个枚举 表示表单提交方式 GET or POST
htmlAttribute
表示form元素的Html属性 是一个object对象 使用new {html属性名字="值"} class也是html属性 但同时它是C#关键字 只能这样指定:new {@class="formstyle"}
Html.EndForm()
表示表单结束 如
@Html.BeginForm("index", "default", FormMethod.Post, new {id="form1"})
<input type="text" />
@{Html.EndForm();}
BeginForm方法返回System.Web.Mvc.Html.MvcForm类型 如果不用中括号括起来 则表示要输出该方法返回的值 EndForm无返回值 所以也需要使用中括号括起来 最后一个参数通过objecr来指定它的Html属性
Html.Raw()
@Html.Raw() 方法输出带有html标签的字符串,如:
@Html.Raw("<div
style='color:red'>输出字符串</div>")
结果:输出字符串
Html.RadioButton(name,value,Ischecked,htmlAttribute)
创建单选按钮
name
单选按钮的name
value
单选按钮的值
Ischecked
是否是选中状态
@{Html.BeginForm("index", "default", FormMethod.Post);}
男人 @Html.RadioButton("radiobtn","man",true,new{@class="radioStyle"})
女人 @Html.RadioButton("radiobtn","woman",false,new{@class="radioStyle"})
@{Html.EndForm();}
Html.RadioButtonFor(expression,value,htmlAttribute)
同样是创建单选按钮的方法 但+For后缀的方法可以使用强类型作为参数expression的参数 推导出类型的属性 它可以将类型的属性名字作为表单元素的name的值
expression
类型为System.Linq.Express.Expression.<Fun<dynamic,Tproperty>>的表达式 如
@model Course.Models.Employee
@{Html.BeginForm("index", "default", FormMethod.Post);}
北京 @Html.RadioButtonFor(n=>n.Address,"北京",new{@class="radioStyle",@checked="checked"})
上海 @Html.RadioButtonFor(n=>n.Address,"上海",new{@class="radioStyle"})
@{Html.EndForm();}
Html.CheckBox()
创建复选框
不建议使用此方法来创建复选框 服务端不好获取值 请直接使用input 注意每个复选框需要有value值 否则获取的选中的复选框的值永远是on
<input type="checkbox" class="Book" value="" name="Books" checked="checked"/>民谣<br/>
<input type="checkbox" class="Book" value="" name="Books" checked="checked"/>电子<br/>
<input type="checkbox" class="Book" value="" name="Books" />低保真<br/>
在Action中这样获取
public ActionResult Editor(int[] Books)
{
foreach (var item in Books)
{
}
}
Html.CheckBoxFor()
不建议使用此方法
Html.DropDownList(name , selectList , defaultSelected,htmlAttribute)
创建下拉选项
name
下拉选项的name
selectList
一个IEnumerable<SelectListItem>集合 集合中的每个选项是SelectListItem类型的 我们可以在Action中创建实现了IEnumerable<selectListItem>接口的集合 然后将集合作为此方法的第二个参数 如
public ActionResult Index()
{
List<SelectListItem> itemList = new List<SelectListItem>
{
new SelectListItem{Text="荔枝",Value="荔枝", Selected=false},
new SelectListItem{Text="番茄",Value="番茄",Selected=false},
new SelectListItem{Text="芒果",Value="芒果",Selected=false}
};
ViewData["choose"] = itemList;
return View();
}
在视图中
@{Html.BeginForm("index", "default", FormMethod.Post);}
@Html.DropDownList("choose",ViewData["choose"] as IEnumerable<SelectListItem>,new{@class="selectStyle"})
@{Html.EndForm();}
defaultSelected
一个文本 表示默认选择的项 可选
@Html.DropDownList("choose",ViewData["choose"] as IEnumerable<SelectListItem>,"请选择",new{@class="selectStyle"})
使用Linq创建下拉选项集合 如
public ActionResult Index()
{
List<Employee> empList = new List<Employee>
{
new Employee{ ID=, Name="sam"},
new Employee{ ID=, Name="leo"},
new Employee{ ID=, Name="korn"}
};
List<SelectListItem> itemList = (from n in empList.ToList()
select new SelectListItem { Text = n.Name, Value = n.ID.ToString(), Selected = false }).ToList(); ViewData["choose"] = itemList;
return View();
}
还可以直接创建SelectList对象来得到同样的结果 这种方式更简洁 如
public ActionResult Index()
{
List<Employee> empList = new List<Employee>
{
new Employee{ ID=, Name="sam"},
new Employee{ ID=, Name="leo"},
new Employee{ ID=, Name="korn"}
};
SelectList selecyList = new SelectList(empList, "ID", "Name");
ViewData["choose"] = selecyList;
return View();
}
在视图中只需两个参数 参数1为choose 引用的是ViewData["choose"]中的键
@Html.DropDownList("choose","请选择")
Html.DropDownListFor(expression,selectList,htmlAttribute)
同样是创建下拉选项的方法 但+For后缀的方法可以使用强类型作为参数expression的参数 推导出类型的属性 它可以将类型的属性名字作为下拉选项元素的name的值
expression
类型为System.Linq.Express.Expression.<Fun<dynamic,Tproperty>>的表达式
selectList
类型为SelectLlist的对象
public ActionResult Index()
{
List<Employee> empList = new List<Employee>
{
new Employee{ ID=, Name="sam"},
new Employee{ ID=, Name="leo"},
new Employee{ ID=, Name="korn"}
};
SelectList selectList = new SelectList(empList, "ID", "Name");
ViewData["choose"] = selectList;
return View();
}
在视图中
@model Course.Models.Employee
@{Html.BeginForm("index", "default", FormMethod.Post);}
@Html.DropDownListFor(n=>n.Name,ViewData["choose"] as SelectList,new{@class="selectStyle"})
@{Html.EndForm();}
Html.ActionLink(linkText , actionName , controlName , routeValues , htmlAttribut)
//var url = "Url.Action("SearchResult")" + "?name=" + keyword;
创建超链接
linkText
超链接文本
actionName
提交到哪个Action处理
controlName
提交到哪个控制器 可选 默认就是当前视图所属的Action所在的控制器
routeValues
object对象 设置超链接查询字符 跟设置html属性是一样的 如new {id=1,name="sam"}
@Html.ActionLink("详细","Detail",new { id=})
生成的超链接为
生成对应的超链接为:
<a href="default/Detail/1">详细</a>
提供多个查询字符
Html.ActionLink("详细","Detail",new { id=,name="sam"})
生成对应的超链接为:
<a href="default/Detail?id=1&name=1">详细</a>
Html.Partial()
将分布视图渲染到当前视图页面 该方法具有多个重载版 所有参数介绍如下
partialName
参数为分布视图名称
viewData
一个ViewDataDictionary类型的对象
model
分布视图需要使用的强类型对象
分布视图可以手动在当前视图的目录中创建 扩展名还是cshtml 只不过里面没有<html>/<head>/<body>标签 你可以在分布视图中编写body以下级别的html元素 也可以写Js和服务端脚本 除了没有几个主体标签 其它和视图都是一样的 可以右击Action - 添加视图 选择分布视图 如
打开TestPartial文件 输入以下代码做个测试
<div style="background:#010067;width:200px;height:100px;padding-top:50px;text-align:center;color:white;">
<label style="color:red;font-size:20px;font-weight: bolder;vertical-align:middle;">+</label>
<label style="vertical-align:middle;">这个框里的内容是分布视图TestPartial</label>
</div>
接着打开Index视图 调用此方法来加载分布视图TestPartial
<body>
<div style="background:#ffd800;width:200px;padding:10px;">
这是Index视图<br /><br />
@Html.Partial("TestPartial")
</div>
</body>
运行http://localhost:8559/default/index 结果如图:
viewData参数和model参数的用法如下
<body>
<div style="background:#ffd800;width:200px;padding:10px;">
这是Index视图<br /><br />
@Html.Partial("TestPartial", new Course.Models.Employee{ ID=1, Name="sam"}, new ViewDataDictionary { {"music1","Free Jazz"},{"music2","BossaNova"}})
</div>
</body>
在分布视图中可获取viewData和model model必须声明一下
@model Course.Models.Employee
<div style="background:#010067;width:200px;height:100px;padding-top:50px;text-align:center;color:white;">
<label style="color:red;font-size:20px;font-weight: bolder;vertical-align:middle;">+</label>
<label style="vertical-align:middle;">@Model.Name</label>
<p><label style="vertical-align:middle;">@ViewData["music1"]</label></p>
<p><label style="vertical-align:middle;">@ViewData["music2"]</label></p>
</div>
运行http://localhost:8559/default/index 结果如图:
Html.RenderPartial()
与Partial方法有类似的行为 区别在于Partial是将分布视图作为字符串加入主视图 而RenderPartial则是将分布式图写入响应输出流 在性能上RenderPartial要优于前者 但以往内此方法不返回值 所以必须使用中括号括起来
@{Html.RenderPartial("TestPartial");}
@{Html.RenderPartial("TestPartial", new Course.Models.Employee{ ID=1, Name="sam"}, new ViewDataDictionary { {"music1","Free Jazz"},{"music2","BossaNova"}});}
Html.Action()
调用一个子操作(Action) 并以Html形式返回结果
actionName
Action的名称
controllerName
控制器的名称
routeValues
路由参数 格式:new {id=xx,code=xxx}
此方法与Partial类似 区别在于 Partial方法不经过Action处理 它直接加载一个分部视图页面 而Action方法会先经过Action处理再加载分布视图 其用法如下
public ActionResult Menu()
{
return PartialView("Menu");
}
右击Menu方法 创建一个分部视图Menu 打开分部视图 输入如下代码
<div style="background: #010067; text-align: center; color: white;">
<p>这是分布视图</p>
<ul>
<li>坂本龍一 </li>
<li>Ian Brown</li>
<li>Ataraxia </li>
</ul>
</div>
在Index页面调用此方法
<body>
<div style="background:#ffd800;width:200px;padding:10px;">
这是Index视图<br /><br />
@Html.Action("Menu")
</div>
</body>
结果
Html.RenderAction()
与Action方法有类似的行为 区别在于Action方法是将分布视图作为字符串加入主视图 而RenderAction则是将分布式图写入响应输出流 在性能上RenderAction要优于前者 但以往内此方法不返回值 所以必须使用中括号括起来
类似的Html辅助方法还有Html.Hidden()、Html.PassWord()、Html.TextBox() 略 ……
UrlHelper类提供了方法用于生成URL
Content()
将一个虚拟的、相对的URL转换为应用程序的绝对URL 如
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
Encode()
对URL地址进行加密
@Url.Encode("http://www.cnblogs.com/")
生成http%3a%2f%2fwww.cnblogs.com%2f
MVC @Html控件的更多相关文章
- MVC树控件,mvc中应用treeview,实现复选框树的多层级表单控件
类似于多层级的角色与权限控制功能,用MVC实现MVC树控件,mvc中应用treeview,实现复选框树的多层级表单控件.最近我们的项目中需要用到树型菜单,以前使用WebForm时,树型菜单有微软提供的 ...
- mvc 日历控件
第二个是日历控件,在网上查了一个普通的日历控件,也生成了下拉的日历样子,但是一些脚本比如选择年月,需要一些时间,最后只好套用了My97 DatePicker,这样以来其实简单多了. 第一步:下载 My ...
- MVC通用控件库展示-MVC4.0+WebAPI+EasyUI+Knockout--SNF快速开发平台3.0
在我们开发中怎么才能提高效率,就是要有大量的公共组件(控件)可以直接使用而不用自己再开发一遍,既然是公共控件那也得简单实用才行.下面就介绍一下SNF-MVC当中的控件库. 总体控件库展示: 1.通用用 ...
- mvc file控件无刷新异步上传操作
前言 上传文件应该是很常见必不可少的一个操作,网上也有很多提供的上传控件.今天遇到一个问题:input控件file无法进行异步无刷新上传.真真的感到别扭.所以就尝试这去处理了一下.主要分三个部分:上传 ...
- AceAdmin In MVC之控件
AceAdmin有很多Html控件,而下载下来之后全部混杂在一起,想用一个控件有时得调整半天,干脆整理出一个版本,而且结合起来MVC的封装.以后就不用一个js css的调了. 在MVC中Html的控件 ...
- 2016 系统设计第一期 (档案一)MVC 相关控件整理
说明:前者是MVC,后者是boostrap 1.form 表单 @using (Html.BeginForm("Create", "User", FormMet ...
- MVC——分页控件
不管是什么类型的网站,分页都是必不可少的功能实现.在这里记录一下我自己接触过的分页控件: 一. MvcPager控件(记得项目里添加MvcPager.dll的引用) 这里面比较常用的就 ——@Html ...
- MVC、控件、一般处理程序中的session and cookie
Mvc中: session: if (!string .IsNullOrEmpty(find)) //设置 Session["oip"] = "无锡"; Vie ...
- mvc日期控件datepick的几篇文章,日后再总结吧
instinctcoder里有两篇,入门级的 http://instinctcoder.com/asp-net-mvc-4-jquery-datepicker/ http://instinctcode ...
- mvc 封装控件使用mvcpager
具体使用如下: 前台部分: @RenderPage("~/Views/Controls/_Pagebar.cshtml", new PageBar { pageIndex = Mo ...
随机推荐
- Go的String转码包
https://github.com/qiniu/iconv https://github.com/djimenez/iconv-go 这是与go不相干的转码包:https://github.com/ ...
- 数据结构——bitmap
近期在看<编程珠玑>这本书. 第1章中引入了bitmap(位图)的数据结构. 曾经没有接触过, 抽出时间研究了一下,记录下来. 书中描写叙述的情景: 1. 最多1000万个7位数电话号码( ...
- Android开发四大组件概述
这个文章主要是讲Android开发的四大组件,本文主要分为 一.Activity具体解释 二.Service具体解释 三.Broadcast Receiver具体解释 四.Content Provid ...
- MySQL JDBC事务处理、封装JDBC工具类
MySQL数据库学习笔记(十)----JDBC事务处理.封装JDBC工具类 一.JDBC事务处理: 我们已经知道,事务的概念即:所有的操作要么同时成功,要么同时失败.在MySQL中提供了Commit. ...
- Echart饼图、柱状图、折线图(pie、bar、line)加入点击事件
var myChart= echarts.init(document.getElementById('myChart')); myChart.on('click', function (param) ...
- 201215-03-19---cocos2dx内存管理--具体解释
因为cocos2dx我们的使用c++写的,所以内存管理就是一个绕只是去的坎,这个你不懂内存仅仅懂业务逻辑的话,还玩什么c++,今天看了半天这个东西,事实上本质上是理解的,可是就是有一个过不去的坎,最终 ...
- ubuntu12.04安装深度音乐播放器和深度影音
昨天折腾了一天,想要安装深度播放器和深度影音都未成功,老是出现依赖关系不满足这个错误.网上解决办法有非常多,可是都没能有效的解决这个问题.今天突然想起来之前换过软件源,是不是这个原因而导致了依赖关系不 ...
- java泛型 之 入门(interface)
一:泛型简单介绍: (1)所谓泛型,就是变量类型的參数化. 泛型是JDK1.5中一个最重要的特征.通过引入泛型,我们将获得编译时类型的安全和执行时更小的抛出ClassCastException的可能. ...
- 纸板上的虚拟现实和代码中的Cardboard
虚拟现实技术 未来视角? Google Cardboard试玩与比較 阅读下面文字请请先戳 戳我戳我 2014年的Google I/O大会,一向以Geek自称的Google拿出了一个叫做Cardboa ...
- Android 检測网络是否连接
权限: <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <u ...