我有这些帮助方法:
@AdminHelper.BeginLeftMenu()
<a href="#">content</a>
@AdminHelper.EndLeftMenu()
是否有可能让它看起来更像:
@AdminHelper.LeftMenu() {
<a href="#">content</a>
}
相反,它会在c#中扮演什么样的角色?
答案 0 :(得分:4)
如何让它看起来像这样:
@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 :(得分:0)
你可以通过两种方式解决这个问题。
1)您可以创建HtmlHelper的扩展方法,如下所示。
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文件夹和所有extention.cshtml,并在文件中添加上面的帮助程序。
更多详情:http://www.asp.net/mvc/videos/mvc-3/mvc-3-razor-helpers