我有重复的元素标记,例如:
<div class="box">
<div class="top"></div>
<div class="content">
content goes here
</div>
<div class="bottom"></div>
</div>
顶部和底部用css设置样式以包含边框图像。
我可以使用JQuery注入标签,但在asp.net mvc中有更好的模板控件方法吗?
谢谢
答案 0 :(得分:2)
这可能有很多方法,这里有一个:
创建一个ViewUserControl(我们称之为“box.ascx”):
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Action>" %>
<div class="box">
<div class="top"></div>
<div class="content">
<% Model(); %>
</div>
<div class="bottom"></div>
</div>
在你的aspx中,无论你需要这个块,都可以这样称呼它:
<% Html.RenderPartial("box", Lambda.Action(() => { %>
here comes my content! <a href="http://www.google.com">Google!</a>
<% })); %>
这是Lambda助手类:
public static class Lambda {
public static Action Action(Action a) {
return a;
}
}
如果你不使用这个小帮手,它会崩溃,因为它会尝试施放动作。
答案 1 :(得分:1)
我刚刚定义了两种扩展方法来编写标签
public static void BeginBox(this HtmlHelper htmlHelper)
{
StringBuilder box = new StringBuilder();
box.AppendLine("<div class=\"box\">");
box.AppendLine(" <div class=\"top\"></div>");
box.AppendLine(" <div class=\"content\">");
htmlHelper.ViewContext.HttpContext.Response.Write(box.ToString());
}
public static void EndBox(this HtmlHelper htmlHelper)
{
StringBuilder box = new StringBuilder();
box.AppendLine(" </div>");
box.AppendLine(" <div class=\"bottom\"></div>");
box.AppendLine("</div>");
htmlHelper.ViewContext.HttpContext.Response.Write(box.ToString());
}
我想现在这样做。
答案 2 :(得分:1)
您肯定希望对HtmlHelper使用扩展方法,以便您可以使用该表示法:
<%=Html.Box("content string") %>
public static stringBox(
this HtmlHelper html,
string Content)
{
var sb = new StringBuilder();
sb.AppendLine("<div class=\"box\">");
sb.AppendLine(" <div class=\"top\"></div>");
sb.AppendLine(" <div class=\"content\">");
sb.AppendLine(Content);
sb.AppendLine(" </div>");
sb.AppendLine(" <div class=\"bottom\"></div>");
sb.AppendLine("</div>");
return sb.ToString();
}
答案 3 :(得分:0)
据我所知,asp.net mvc中没有内置模板解决方案。但是因为输出是纯html,所以只用css和JS可能很容易做自己的模板。
当然,由于asp.net mvc中的所有内容都是可交换的,因此您可以使用支持模板的视图引擎替换默认视图引擎。
答案 4 :(得分:0)
为什么不使用母版页?您可以像在ASP.Net中一样使用MVC中的母版页