传统的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控件的更多相关文章

  1. MVC树控件,mvc中应用treeview,实现复选框树的多层级表单控件

    类似于多层级的角色与权限控制功能,用MVC实现MVC树控件,mvc中应用treeview,实现复选框树的多层级表单控件.最近我们的项目中需要用到树型菜单,以前使用WebForm时,树型菜单有微软提供的 ...

  2. mvc 日历控件

    第二个是日历控件,在网上查了一个普通的日历控件,也生成了下拉的日历样子,但是一些脚本比如选择年月,需要一些时间,最后只好套用了My97 DatePicker,这样以来其实简单多了. 第一步:下载 My ...

  3. MVC通用控件库展示-MVC4.0+WebAPI+EasyUI+Knockout--SNF快速开发平台3.0

    在我们开发中怎么才能提高效率,就是要有大量的公共组件(控件)可以直接使用而不用自己再开发一遍,既然是公共控件那也得简单实用才行.下面就介绍一下SNF-MVC当中的控件库. 总体控件库展示: 1.通用用 ...

  4. mvc file控件无刷新异步上传操作

    前言 上传文件应该是很常见必不可少的一个操作,网上也有很多提供的上传控件.今天遇到一个问题:input控件file无法进行异步无刷新上传.真真的感到别扭.所以就尝试这去处理了一下.主要分三个部分:上传 ...

  5. AceAdmin In MVC之控件

    AceAdmin有很多Html控件,而下载下来之后全部混杂在一起,想用一个控件有时得调整半天,干脆整理出一个版本,而且结合起来MVC的封装.以后就不用一个js css的调了. 在MVC中Html的控件 ...

  6. 2016 系统设计第一期 (档案一)MVC 相关控件整理

    说明:前者是MVC,后者是boostrap 1.form 表单 @using (Html.BeginForm("Create", "User", FormMet ...

  7. MVC——分页控件

    不管是什么类型的网站,分页都是必不可少的功能实现.在这里记录一下我自己接触过的分页控件: 一. MvcPager控件(记得项目里添加MvcPager.dll的引用) 这里面比较常用的就 ——@Html ...

  8. MVC、控件、一般处理程序中的session and cookie

    Mvc中: session: if (!string .IsNullOrEmpty(find)) //设置 Session["oip"] = "无锡"; Vie ...

  9. mvc日期控件datepick的几篇文章,日后再总结吧

    instinctcoder里有两篇,入门级的 http://instinctcoder.com/asp-net-mvc-4-jquery-datepicker/ http://instinctcode ...

  10. mvc 封装控件使用mvcpager

    具体使用如下: 前台部分: @RenderPage("~/Views/Controls/_Pagebar.cshtml", new PageBar { pageIndex = Mo ...

随机推荐

  1. C语言实现通用数据结构的高效设计

    近期在阅读一个开源的C++代码.里面用到了大量的STL里面的东西.或许是自己一直用C而非常少用C++来实现算法的原因.STL里面大量的模板令人心烦.一直对STL的效率表示怀疑,但在网上搜到这样一个帖子 ...

  2. POJ 3040 Allowance 贪心

    这题目的贪心思路还是有一点细节问题的. 还没有证明,据说是因为题目给的条件是每个价格是比它小的价格的倍数才能这么贪心的. 思路如下: 假设要给奶牛的钱为C 1)从大面值到小面值一次拿钱,能拿多少拿多少 ...

  3. ios 正則表達式替换

    1. 不可变字符串   (content 是不可变) NSRegularExpression *regularExpression = [NSRegularExpression regularExpr ...

  4. Visual Studio 2008中FormatX源代码格式化插件

    原地址:http://www.cr173.com/html/15492_1.html 我总是对组里的兄弟代码规范性近乎完美的要求,举个简单的例子: 1.  每个方法必须有注释,方法参数详细说明 2.  ...

  5. memwatch的使用

    博主的新Blog地址:http://www.brantchen.com 欢迎訪问:) linux下的測试工具真是少之又少,还不好用,近期试用了memwatch,感觉网上的介绍不太好,所以放在这里跟大家 ...

  6. 日期格式化标签<fmt:formatDate>&<fmt:setTimeZone>时区标签的使用demo

    日期格式化标签<fmt:formatDate>&<fmt:setTimeZone>时区标签的使用demo <%@ page contentType="t ...

  7. SE 2014 年4月21日(二)

    实验练习: 如图配置: 两BGP自治系统,要求建立相关BGP邻居关系 1. 建立BGP邻居关系 要求使用BGP对等体组完成(IBGP要求使用loopback接口作为TCP建立的源接口) 2. R3 R ...

  8. Keepalived+LVS+Nginx负载均衡之高可用

    Keepalived+LVS+Nginx负载均衡之高可用 上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常 ...

  9. JAVA 根据经纬度算出附近的正方形的四个角的经纬度

    /** * * @param longitude 经度 * @param latitude 纬度 * @param distance 范围(米) * @return */ public static ...

  10. atitit查询表改动表字段没反应--解锁锁定的表

    atitit查询表改动表字段没反应--解锁锁定的表 查询表改动表字段没反应 要是使用gui 没反应,最好使用cmd 方式,不卉不个gui 锁上.. ALTER TABLE t_mb_awardweix ...