一、返回html形式的字符的两种方法:
1.使用MvcHtmlString()
return new MvcHtmlString("<form>Enter your password:<input type=text><input type=submit value=\"Log In\"/></form>");
2.使用Html.Raw(str)
@Html.Raw(@"<form>Enter your password:<input type=text><input type=submit value='LogIn'/></form>")
上面的两个方法都会输出一个表单。如果直接使用下面的方法的话,返回一个乱码
return "<form>Enter your password:<input type=text><input type=submit value=\"Log In\"/></form>");
二、html扩展标签
1.定义一个HtmlExtension
public static MvcHtmlString CreateUL(this HtmlHelper html, string[] listItems)
{
TagBuilder tag = new TagBuilder("ul");
//方法
//AddCssClass() – 允许你向标签添加一个新的 class = "" 属性。
//GenerateId() - 允许你为标签添加一个id属性。这个方法自动替换id中的句点(默认情况下,句点将会替换为下划线)。
//MergeAttribute() - 允许你为标签添加属性。这个方法拥有大量的重载。
//SetInnerText() - 允许你设置标签内部的文本。内部文本自动进行了HTML编码。
//ToString() - 允许你呈现标签。你可以指定是否想要创建一个正常的标签、一个开始标签、一个结束标签,或者一个自闭合(self-closing)标签。
//TagBuilder类拥有四个重要的属性:
//Attributes - 代表这个标签的所有属性。
//IdAttributeDotReplacement - 代表GenerateId()方法所使用的,用来替代句点的字符(默认是下划线)。
//InnerHTML - 代表着标签内部的内容。将一个字符串赋值给这个属性,并不会对这个字符进行HTML编码。
//TagName - 代表着这个标签的名称。
var builter = new TagBuilder("li");
for(int i=0;i<listItems.Length;i++)
{
//定义一个标签
TagBuilder itemTag = new TagBuilder("li");
//为标签添加类名
itemTag.AddCssClass("myclass");
//为标签添加属性名
itemTag.MergeAttribute("background","red");
//为标签自动生成id
itemTag.GenerateId("liID"+i.ToString());
itemTag.SetInnerText(listItems[i]);
tag.InnerHtml += itemTag.ToString();
}
return new MvcHtmlString(tag.ToString());
}
2.引用命名空间和调用方法
在引用命名空间的时间可以在当前View中添加,也可以添加到View文件夹里的web.config里面的。注意调用时是@Html.CreateUL(Model)
三、常用的内置html helper
1、TextBox 不解释直接上图
<h2>html Helper练习</h2>
<h3>TextBox练习</h3>
<p>Html.TextBox("txtName")该方法的参数为文本框的名字name属性 @Html.TextBox("txtName")</p>
<p>Html.TextBox("txtName",Model.Name)该方法的第一个参数为文本框的名字name属性 第二个参数为文本框的值 @Html.TextBox("txtName",Model.Name)</p>
<p>Html.TextBoxFor(x=>x.Name)该方法的为模型模板的写法,有个For @Html.TextBoxFor(x=>x.Name) 该方法为推荐写法</p>
多行文本 @Html.TextAreaFor(x => x.Name, 5, 20, new{}) 最后new为特性
View Code
2、select标签
在select标签之前,认识一个SelectList类,下面给出参数最多的构造方法:
SelectList(IEnumerable items, string dataValueField, string dataTextField, object selectedValue)
第一个参数为一个IEnumerable类型的数据源,第二个参数为可以表示显示字段的值,第三个参数为显示的字段,第四个参数为默认选中的显示文本的值(不是文本)。如果第四个参数为空时
,则是一个为实现值为空的SelectList。我们尽管把这个东西看做是一个含有数据的一个对象。
接着我们来看HtmlHelper的一个扩展方法——DropDownList,下面给出一个较为简单的方法:
//其中name为select标签的name。optionLable为默认显示的一个文本
public static MvcHtmlString DropDownList(this HtmlHelper htmlHelper, string name, string optionLabel)
{
return htmlHelper.DropDownList(name, null, optionLabel, ((IDictionary<string, object>) null));
}
其调用了DropDownListHelper(htmlHelper, name, selectList, optionLabel, htmlAttributes)方法,最终根据name来获取ViewData里面的数据源,然后构造出了一个Select标签。
下面给出一个例子来演示如何显示一个Select标签(多个对象时使用):
在controller里面定义: ViewBag.PersonSelect = new SelectList(listP,"ID","Name");//表示没有指定选项的。
在View中显示:@Html.DropDownList("PersonSelect", "请选择")
注意:请不要把SelectList的显示值和@Html.DropDownList的显示值弄混了。
下面演示一下只有一个对象时选择自己所属的选项(有一个对象是使用)。
@model HtmlHelperDemo.Models.Person
@{
ViewBag.Title = "Index";
}
@Html.DropDownListFor(x => x.Gender, new SelectList(new[]{new { Text="男",Value=true},new { Text="女",Value=false}},"Value","Text",Model.Gender))