mvc4自定义辅助器方法的学习

1、什么是辅助器

  它们可以对代码块和标记进行打包,以便能够在mvc框架应用程序中重用。可以理解成编写在页面上的C#代码(方法)。

2 、自定义辅助器

 创建“基本”的mvc示例,并创建Basic控制器,及index视图

   Basic控制器

 public class BasicController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Fruits = new string[] { "苹果", "橘子", "梨子" };
            ViewBag.Citys = new string[] { "北京", "沈阳", "广州" };
            string message = "这是一个Html元素标签:<input>";
            return View((object)message);
        }
    }

Index页面

1)普通方式

     <div title="普通方式">
            <div>
                水果类:
                <ul>
                    @foreach (string str in (string[])ViewBag.Fruits)
                    {
                        <li>@str</li>
                    }
                </ul>
            </div>
            <div>
                城市类:
                <ul>
                    @foreach (string str in (string[])ViewBag.Citys)
                    {
                        <li>@str</li>
                    }
                </ul>
            </div>
            <div>
                信息:
                <p>@Model</p>
          </div>
      </div> 

2)内联辅助器方法

   内联辅助器具有方法名和参数,这个例子定义了ListArrayItems的辅助器,它是没有返回值,结果直接输出到客户端的响应中,只需要修改ListArrayItems里的内容即可。

定义辅助器方法

@helper ListArrayItems(string[] items) { 
    foreach (string str in items) {
        <li>@str</li>
    }
 }

页面调用

        <div title="内联辅助器">
            <div>
                水果类:
                <ul>
                    @ListArrayItems(ViewBag.Fruits)
                </ul>
            </div>
            <div>
                城市类:
                <ul>
                    @ListArrayItems(ViewBag.Citys)
                </ul>
            </div>
            <div>
                信息:
                <p>@Model</p>
            </div>
        </div>   

 

3)外部辅助器方法

创建一个类文件

    public static class CustomHelpers
    {
        public static MvcHtmlString ListArrayItems(this HtmlHelper html, string[] list) {
            TagBuilder tag = new TagBuilder("ul");
            foreach (string str in list) {
                TagBuilder itemTag = new TagBuilder("li");
                itemTag.SetInnerText(str);
                tag.InnerHtml += itemTag.ToString();
            }
            return new MvcHtmlString(tag.ToString());
        }
    }

返回了 MvcHtmlString 类型,this HtmlHelper html 表示这是一个扩展方法,TagBulider创建html元素,不用使用大量转意符、尖括号等,非常方便。

调用外部辅助器首先要引用命名空间,然后调用方法如下:

引用命令空间

 

@using StudyMVC4.Helpers

 

  <div title="外部辅助器">
            <div>
                水果类:
                @Html.ListArrayItems((string[])ViewBag.Fruits)
            </div>
            <div>
                城市类:
                @Html.ListArrayItems((string[])ViewBag.Citys)
            </div>
            <div>
                信息:
                <p>@Model</p>
            </div>
        </div>

整合一下index页面

@{
    ViewBag.Title = "Index";
}
@helper ListArrayItems(string[] items) { 
    foreach (string str in items) {
        <li>@str</li>
    }
 }
@using StudyMVC4.Helpers
<!DOCTYPE>
<html>
    <head>
        <title>辅助器方法</title>
    </head>
    <body>
        <div title="普通方式">
            <h3>普通方式:</h3>
            <div>
                水果类:
                <ul>
                    @foreach (string str in (string[])ViewBag.Fruits)
                    {
                        <li>@str</li>
                    }
                </ul>
            </div>
            <div>
                城市类:
                <ul>
                    @foreach (string str in (string[])ViewBag.Citys)
                    {
                        <li>@str</li>
                    }
                </ul>
            </div>
            <div>
                信息:
                <p>@Model</p>
          </div>
      </div> 
        <hr />
        <div title="内联辅助器">
            <h3>内联辅助器:</h3>
            <div>
                水果类:
                <ul>
                    @ListArrayItems(ViewBag.Fruits)
                </ul>
            </div>
            <div>
                城市类:
                <ul>
                    @ListArrayItems(ViewBag.Citys)
                </ul>
            </div>
            <div>
                信息:
                <p>@Model</p>
            </div>
        </div>
        <hr />
        <div title="外部辅助器">
            <h3>外部辅助器:</h3>
            <div>
                水果类:
                @Html.ListArrayItems((string[])ViewBag.Fruits)
            </div>
            <div>
                城市类:
                @Html.ListArrayItems((string[])ViewBag.Citys)
            </div>
            <div>
                信息:
                <p>@Model</p>
            </div>
        </div>     
    </body>
</html>

3、运行结果

1)普通方式

2)内联辅助器

3)外部辅助器

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325946299&siteId=291194637