在ASP.NET MVC應(yīng)用程序的開發(fā)中,我們常碰到類似Html.Label或Html.TextBox這樣的代碼,它將在網(wǎng)頁上產(chǎn)生一個label或input標記。這些HtmlHelper的擴展方法有些像WebForm中的控件,只需傳入一些參數(shù)即可生成相應(yīng)的HTML代碼。本文將介紹創(chuàng)建HtmlHelper的方法。
Html.Textbox方法的返回值是MvcHtmlString,它生成了一些HTML代碼。創(chuàng)建HtmlHelper,就像在生成HTML代碼。下面以一個帶有簡要描述功能的鏈接HtmlHelper為例介紹創(chuàng)建自定義HtmlHelper的方法。它將顯示一個鏈接并在下方簡要介紹該與該鏈接內(nèi)容有關(guān)的信息。在某些帶有簡要描述的項列表頁上可能會需要類似的功能。最后的結(jié)果預(yù)覽如下圖。
上面使用了3次自定義的HtmlHelper,每次生成的代碼如下
1 <div>
2 <p class="LinkTitle"><a href="#">鏈接標題</a></p>
3 <p class="LinkDescription">鏈接描述</p>
4 </div>
可能稍微有點復(fù)雜,因為有了標簽的嵌套。
做好準備工作以后,新建一個靜態(tài)類LinkWithDescriptionExtensions,添加靜態(tài)方法LinkWithDescription,代碼如下
1 /// <summary>
2 /// 帶描述的鏈接擴展方法
3 /// </summary>
4 /// <param name="htmlHelper">要擴展的HtmlHelper類</param>
5 /// <param name="title">標題</param>
6 /// <param name="url">鏈接地址</param>
7 /// <param name="description">描述</param>
8 /// <returns>HTML代碼</returns>
9 public static MvcHtmlString LinkWithDescription(this HtmlHelper htmlHelper, string title, string url, string description)
10 {
11 // 生成與標題鏈接有關(guān)的HTML代碼
12 TagBuilder titleContainer = new TagBuilder("p"); // 標題鏈接容器p
13 TagBuilder titleLink = new TagBuilder("a"); // 標題中的文字要有鏈接,所以包含在a標簽內(nèi)
14 titleLink.MergeAttribute("href", url); // 為a添加href屬性并指定鏈接地址
15 titleLink.SetInnerText(title); // 標題文字
16 titleContainer.InnerHtml = titleLink.ToString(); // 將a放到p中
17 titleContainer.AddCssClass("LinkTitle"); // 為標題添加樣式
18
19 // 生成與鏈接描述有關(guān)的HTML代碼
20 TagBuilder descriptionContainer = new TagBuilder("p"); // 連接描述容器p
21 descriptionContainer.InnerHtml = description; // 描述文字
22 descriptionContainer.AddCssClass("LinkDescription"); // 為描述添加樣式
23
24 // 將上述元素放入一個DIV中
25 TagBuilder div = new TagBuilder("div");
26 div.InnerHtml = string.Format("{0}{1}", titleContainer.ToString(), descriptionContainer.ToString());
27
28 // 返回生成的HTML代碼
29 return MvcHtmlString.Create(div.ToString());
30 }
先理清結(jié)構(gòu)再使用TagBuilder生成HTML代碼是比較方便的。這里也可以使用拼接字符串的方式來生成HTML代碼,只要最后得到所需的HTML代碼就可以,但是我個人不建議使用拼接字符串的方式,這樣不僅思維容易混亂而且容易出錯。使用TagBuilder既結(jié)構(gòu)清晰,又不容易出錯。
在ASPX頁中,可以使用
1 <%:Html.LinkWithDescription("測試鏈接1", "#", "這是測試鏈接1的描述")%>
2 <%:Html.LinkWithDescription("測試鏈接2", "#", "這是測試鏈接2的描述")%>
3 <%:Html.LinkWithDescription("測試鏈接3", "#", "這是測試鏈接3的描述")%>
來調(diào)用上面的擴展方法,這里的鏈接標題、鏈接地址和描述等信息可以通過ViewData等方式傳入。在Action中寫
1 /// <summary>
2 /// Demo
3 /// </summary>
4 /// <returns>Demo視圖</returns>
5 public ActionResult Demo()
6 {
7 // 創(chuàng)建鏈接信息列表
8 List<LinkInfo> links = new List<LinkInfo>();
9 links.Add(new LinkInfo { Description = "這是測試鏈接1的描述", Title = "測試鏈接1", Url = "#" });
10 links.Add(new LinkInfo { Description = "這是測試鏈接2的描述", Title = "測試鏈接2", Url = "#" });
11 links.Add(new LinkInfo { Description = "這是測試鏈接3的描述", Title = "測試鏈接3", Url = "#" });
12
13
14 ViewData["Links"] = links;
15
16 return View();
17 }
在ASPX頁中寫
1 <%List<LinkInfo> links=ViewData["Links"] as List<LinkInfo>;
2 foreach (var link in links)
3 { %>
4 <%:Html.LinkWithDescription(link.Title, link.Url, link.Description)%>
5 <%} %>
在ASP.NET MVC應(yīng)用程序的開發(fā)中,我們常碰到類似Html.Label或Html.TextBox這樣的代碼,它將在網(wǎng)頁上產(chǎn)生一個label或input標記。這些HtmlHelper的擴展方法有些像WebForm中的控件,只需傳入一些參數(shù)即可生成相應(yīng)的HTML代碼。本文將介紹創(chuàng)建HtmlHelper的方法。
Html.Textbox方法的返回值是MvcHtmlString,它生成了一些HTML代碼。創(chuàng)建HtmlHelper,就像在生成HTML代碼。下面以一個帶有簡要描述功能的鏈接HtmlHelper為例介紹創(chuàng)建自定義HtmlHelper的方法。它將顯示一個鏈接并在下方簡要介紹該與該鏈接內(nèi)容有關(guān)的信息。在某些帶有簡要描述的項列表頁上可能會需要類似的功能。最后的結(jié)果預(yù)覽如下圖。
上面使用了3次自定義的HtmlHelper,每次生成的代碼如下
1 <div>
2 <p class="LinkTitle"><a href="#">鏈接標題</a></p>
3 <p class="LinkDescription">鏈接描述</p>
4 </div>
可能稍微有點復(fù)雜,因為有了標簽的嵌套。
做好準備工作以后,新建一個靜態(tài)類LinkWithDescriptionExtensions,添加靜態(tài)方法LinkWithDescription,代碼如下
1 /// <summary>
2 /// 帶描述的鏈接擴展方法
3 /// </summary>
4 /// <param name="htmlHelper">要擴展的HtmlHelper類</param>
5 /// <param name="title">標題</param>
6 /// <param name="url">鏈接地址</param>
7 /// <param name="description">描述</param>
8 /// <returns>HTML代碼</returns>
9 public static MvcHtmlString LinkWithDescription(this HtmlHelper htmlHelper, string title, string url, string description)
10 {
11 // 生成與標題鏈接有關(guān)的HTML代碼
12 TagBuilder titleContainer = new TagBuilder("p"); // 標題鏈接容器p
13 TagBuilder titleLink = new TagBuilder("a"); // 標題中的文字要有鏈接,所以包含在a標簽內(nèi)
14 titleLink.MergeAttribute("href", url); // 為a添加href屬性并指定鏈接地址
15 titleLink.SetInnerText(title); // 標題文字
16 titleContainer.InnerHtml = titleLink.ToString(); // 將a放到p中
17 titleContainer.AddCssClass("LinkTitle"); // 為標題添加樣式
18
19 // 生成與鏈接描述有關(guān)的HTML代碼
20 TagBuilder descriptionContainer = new TagBuilder("p"); // 連接描述容器p
21 descriptionContainer.InnerHtml = description; // 描述文字
22 descriptionContainer.AddCssClass("LinkDescription"); // 為描述添加樣式
23
24 // 將上述元素放入一個DIV中
25 TagBuilder div = new TagBuilder("div");
26 div.InnerHtml = string.Format("{0}{1}", titleContainer.ToString(), descriptionContainer.ToString());
27
28 // 返回生成的HTML代碼
29 return MvcHtmlString.Create(div.ToString());
30 }
先理清結(jié)構(gòu)再使用TagBuilder生成HTML代碼是比較方便的。這里也可以使用拼接字符串的方式來生成HTML代碼,只要最后得到所需的HTML代碼就可以,但是我個人不建議使用拼接字符串的方式,這樣不僅思維容易混亂而且容易出錯。使用TagBuilder既結(jié)構(gòu)清晰,又不容易出錯。
在ASPX頁中,可以使用
1 <%:Html.LinkWithDescription("測試鏈接1", "#", "這是測試鏈接1的描述")%>
2 <%:Html.LinkWithDescription("測試鏈接2", "#", "這是測試鏈接2的描述")%>
3 <%:Html.LinkWithDescription("測試鏈接3", "#", "這是測試鏈接3的描述")%>
來調(diào)用上面的擴展方法,這里的鏈接標題、鏈接地址和描述等信息可以通過ViewData等方式傳入。在Action中寫
1 /// <summary>
2 /// Demo
3 /// </summary>
4 /// <returns>Demo視圖</returns>
5 public ActionResult Demo()
6 {
7 // 創(chuàng)建鏈接信息列表
8 List<LinkInfo> links = new List<LinkInfo>();
9 links.Add(new LinkInfo { Description = "這是測試鏈接1的描述", Title = "測試鏈接1", Url = "#" });
10 links.Add(new LinkInfo { Description = "這是測試鏈接2的描述", Title = "測試鏈接2", Url = "#" });
11 links.Add(new LinkInfo { Description = "這是測試鏈接3的描述", Title = "測試鏈接3", Url = "#" });
12
13
14 ViewData["Links"] = links;
15
16 return View();
17 }
在ASPX頁中寫
1 <%List<LinkInfo> links=ViewData["Links"] as List<LinkInfo>;
2 foreach (var link in links)
3 { %>
4 <%:Html.LinkWithDescription(link.Title, link.Url, link.Description)%>
5 <%} %>
在ASP.NET MVC應(yīng)用程序的開發(fā)中,我們常碰到類似Html.Label或Html.TextBox這樣的代碼,它將在網(wǎng)頁上產(chǎn)生一個label或input標記。這些HtmlHelper的擴展方法有些像WebForm中的控件,只需傳入一些參數(shù)即可生成相應(yīng)的HTML代碼。本文將介紹創(chuàng)建HtmlHelper的方法。
Html.Textbox方法的返回值是MvcHtmlString,它生成了一些HTML代碼。創(chuàng)建HtmlHelper,就像在生成HTML代碼。下面以一個帶有簡要描述功能的鏈接HtmlHelper為例介紹創(chuàng)建自定義HtmlHelper的方法。它將顯示一個鏈接并在下方簡要介紹該與該鏈接內(nèi)容有關(guān)的信息。在某些帶有簡要描述的項列表頁上可能會需要類似的功能。最后的結(jié)果預(yù)覽如下圖。
上面使用了3次自定義的HtmlHelper,每次生成的代碼如下
1 <div>
2 <p class="LinkTitle"><a href="#">鏈接標題</a></p>
3 <p class="LinkDescription">鏈接描述</p>
4 </div>
可能稍微有點復(fù)雜,因為有了標簽的嵌套。
做好準備工作以后,新建一個靜態(tài)類LinkWithDescriptionExtensions,添加靜態(tài)方法LinkWithDescription,代碼如下
1 /// <summary>
2 /// 帶描述的鏈接擴展方法
3 /// </summary>
4 /// <param name="htmlHelper">要擴展的HtmlHelper類</param>
5 /// <param name="title">標題</param>
6 /// <param name="url">鏈接地址</param>
7 /// <param name="description">描述</param>
8 /// <returns>HTML代碼</returns>
9 public static MvcHtmlString LinkWithDescription(this HtmlHelper htmlHelper, string title, string url, string description)
10 {
11 // 生成與標題鏈接有關(guān)的HTML代碼
12 TagBuilder titleContainer = new TagBuilder("p"); // 標題鏈接容器p
13 TagBuilder titleLink = new TagBuilder("a"); // 標題中的文字要有鏈接,所以包含在a標簽內(nèi)
14 titleLink.MergeAttribute("href", url); // 為a添加href屬性并指定鏈接地址
15 titleLink.SetInnerText(title); // 標題文字
16 titleContainer.InnerHtml = titleLink.ToString(); // 將a放到p中
17 titleContainer.AddCssClass("LinkTitle"); // 為標題添加樣式
18
19 // 生成與鏈接描述有關(guān)的HTML代碼
20 TagBuilder descriptionContainer = new TagBuilder("p"); // 連接描述容器p
21 descriptionContainer.InnerHtml = description; // 描述文字
22 descriptionContainer.AddCssClass("LinkDescription"); // 為描述添加樣式
23
24 // 將上述元素放入一個DIV中
25 TagBuilder div = new TagBuilder("div");
26 div.InnerHtml = string.Format("{0}{1}", titleContainer.ToString(), descriptionContainer.ToString());
27
28 // 返回生成的HTML代碼
29 return MvcHtmlString.Create(div.ToString());
30 }
先理清結(jié)構(gòu)再使用TagBuilder生成HTML代碼是比較方便的。這里也可以使用拼接字符串的方式來生成HTML代碼,只要最后得到所需的HTML代碼就可以,但是我個人不建議使用拼接字符串的方式,這樣不僅思維容易混亂而且容易出錯。使用TagBuilder既結(jié)構(gòu)清晰,又不容易出錯。
在ASPX頁中,可以使用
1 <%:Html.LinkWithDescription("測試鏈接1", "#", "這是測試鏈接1的描述")%>
2 <%:Html.LinkWithDescription("測試鏈接2", "#", "這是測試鏈接2的描述")%>
3 <%:Html.LinkWithDescription("測試鏈接3", "#", "這是測試鏈接3的描述")%>
來調(diào)用上面的擴展方法,這里的鏈接標題、鏈接地址和描述等信息可以通過ViewData等方式傳入。在Action中寫
1 /// <summary>
2 /// Demo
3 /// </summary>
4 /// <returns>Demo視圖</returns>
5 public ActionResult Demo()
6 {
7 // 創(chuàng)建鏈接信息列表
8 List<LinkInfo> links = new List<LinkInfo>();
9 links.Add(new LinkInfo { Description = "這是測試鏈接1的描述", Title = "測試鏈接1", Url = "#" });
10 links.Add(new LinkInfo { Description = "這是測試鏈接2的描述", Title = "測試鏈接2", Url = "#" });
11 links.Add(new LinkInfo { Description = "這是測試鏈接3的描述", Title = "測試鏈接3", Url = "#" });
12
13
14 ViewData["Links"] = links;
15
16 return View();
17 }
在ASPX頁中寫
1 <%List<LinkInfo> links=ViewData["Links"] as List<LinkInfo>;
2 foreach (var link in links)
3 { %>
4 <%:Html.LinkWithDescription(link.Title, link.Url, link.Description)%>
5 <%} %>