ASP.NET MVC模板

时间:2009-03-07 21:14:18

标签: asp.net-mvc

我有重复的元素标记,例如:

<div class="box">
    <div class="top"></div>
    <div class="content">
      content goes here
    </div>
    <div class="bottom"></div>
</div>

顶部和底部用css设置样式以包含边框图像。

我可以使用JQuery注入标签,但在asp.net mvc中有更好的模板控件方法吗?

谢谢

5 个答案:

答案 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中的母版页