一、返回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 不解释直接上图

 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))