Шаблон ASP.NET MVC view - PullRequest
       2

Шаблон ASP.NET MVC view

3 голосов
/ 18 августа 2011

Вот мой код для отображения рейтинга пользователей:

<div class="leftBlock">
    <div class="leftBlockHead">
        <div class="textHead">
            <b>Users rating</b>
        </div>
    </div>
    <div id="leftBlockContent">
        @foreach (var user in Model)
        {
            <div class="list">
                @user.Login @user.Rating
            </div>
        }
    </div>
</div>

Проблема в том, что я использую ту же структуру html для некоторых других блоков.Поэтому я не хочу повторять этот код, мне нужен какой-то шаблон, который будет принимать заголовок блока и @foreach в качестве аргументов.Как это осуществить?

Ответы [ 3 ]

1 голос
/ 18 августа 2011

Вы можете посмотреть на создание методов расширения класса HTMLHelper для такого рендеринга.
Вы также можете использовать метод HTMLHelper RenderPartial. Для этого вам нужно определить

  • Отдельный просмотр класса.
  • Имейте модель, связанную с этим. Позвоните
  • Расширение RenderPartial, где когда-либо должен отображаться этот вид.
0 голосов
/ 19 августа 2011

Я наконец-то использовал шаблонных делегатов бритвы .

Вот мой частичный взгляд:

@model LeftColumnBlockViewModel

<div class="levo_blok1">
    <div class="levo_blok1_head">
        <div class="text_head">
            @Model.Title
        </div>
    </div>
    <div id="levo_blok1_content">
        @Model.Content(null)
    </div>
</div>

Вот модель для просмотра:

public class LeftColumnBlockViewModel
    {
        public string Title { get; set; }
        public Func<dynamic, object> Content { get; set; }

        public LeftColumnBlockViewModel(string title, Func<dynamic, object> content)
        {
            Title = title;
            Content = content;
        }
    }

и вот использование:

@Html.Partial(MVC.Shared.Views._LeftColumnBlock, 
              new LeftColumnBlockViewModel(
                  Battles.CurrentBattles, 
                  @<text>
                    @foreach (var currentBattle in Model.CurrentBattlesViewModels) 
                    { 
                        <div class="list">
                            @currentBattle.Budget / @currentBattle.BetLimit% / @currentBattle.StartDate-@currentBattle.EndDate
                        </div> 
                    }
                  </text>))
0 голосов
/ 18 августа 2011

Я бы пошел вперед и написал бы собственный помощник по HTML, чтобы сделать это ... Это выглядело бы как

@helper YourHelper(Model model){
**DO YOUR FOREACH STUFF IN HERE**
<div class="leftBlock">
    <div class="leftBlockHead">
        <div class="textHead">
            <b>model.Title</b>
        </div>
    </div>
    <div id="leftBlockContent">
        @Html.Raw(model.Content)
    </div>
</div>
}

и тогда ты будешь использовать это .. @ YourHelper (модель)

http://weblogs.asp.net/jgalloway/archive/2011/03/23/comparing-mvc-3-helpers-using-extension-methods-and-declarative-razor-helper.aspx

...