这些简单的HtmlHelper可以优化吗
本文关键字:优化 HtmlHelper 简单 | 更新日期: 2023-09-27 18:20:55
我有这些助手方法:
@AdminHelper.BeginLeftMenu()
<a href="#">content</a>
@AdminHelper.EndLeftMenu()
有没有可能让它看起来更像:
@AdminHelper.LeftMenu() {
<a href="#">content</a>
}
相反,它在c#中会是什么样子?
让它看起来像这样怎么样:
@using (Html.BeginLeftMenu())
{
<a href="#">content</a>
}
它将生成例如:
<li>
<a href="#">content</a>
</li>
你本可以这样实现它:
public static class HtmlHelperExtensions
{
private class Menu : IDisposable
{
private readonly TextWriter _writer;
public Menu(TextWriter writer)
{
_writer = writer;
}
public void Dispose()
{
_writer.Write("</li>");
}
}
public static IDisposable BeginLeftMenu(this HtmlHelper htmlHelper)
{
var writer = htmlHelper.ViewContext.Writer;
writer.Write("<li>");
return new Menu(writer);
}
}
有两种方法可以处理此问题。
1) 您可以创建如下HtmlHelper的Extension方法。
public static MvcHtmlString CreateListLink(this HtmlHelper helper, string href, string linkName)
{
return new MvcHtmlString(string.Format("<li><a href='"{0}'">{1}</a></li>", href, linkName));
}
你可以在下面使用它
@Html.CreateListLink("javascript:alert('yada yada yada')", "Test Me")
它将生成类似的html文本
<li>
<a href="javascript:alert('yada yada yada')">Test Me</a>
</li>
2) 你可以更喜欢Asp.net MVC的新功能,并使用@helper razor语法
@helper MyHelper(string href, string linkName){
<li><a href="@href">@linkName</a></li>;
}
@MyHelper("javascript:alert('I am from razor..!!')", "hi")
您还可以在该文件夹下创建App_Code文件夹和所有扩展名.cshtml,并在文件中添加上面的帮助程序。
更多详细信息:http://www.asp.net/mvc/videos/mvc-3/mvc-3-razor-helpers