ASP.NET MVC Templating - PullRequest
       9

ASP.NET MVC Templating

1 голос
/ 08 марта 2009

У меня есть повторяющаяся разметка для элементов, например:

<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 ]

2 голосов
/ 08 марта 2009

Вероятно, есть много способов обойти это, вот один:

Создание 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 голос
/ 08 марта 2009

Вы определенно хотите использовать метод расширения для 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();
  }
1 голос
/ 08 марта 2009

Я только что определил два метода расширения для записи тегов

  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());
  }

Полагаю, сейчас это подойдет.

0 голосов
/ 08 марта 2009

Почему вы не используете мастер-страницы? Вы можете использовать главные страницы в MVC так же, как в ASP.Net

0 голосов
/ 08 марта 2009

Насколько я знаю, в asp.net mvc нет встроенного шаблонного решения. Но поскольку вывод - чистый html, очень легко создавать свои собственные шаблоны только с помощью css и, возможно, немного JS.

Конечно, поскольку все в asp.net mvc можно менять, вы можете заменить движок представления по умолчанию на тот, который поддерживает шаблоны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...