ASP.NET MVC3 Razor: возможно ли иметь блоки кода C # без @if или @foreach? - PullRequest
6 голосов
/ 15 июня 2011

Я действительно не нашел решения, которое работает через SO.

... и подозреваю, что мне действительно следует сделать это в модели ...

, но возможно ли иметь блоки кода C #где можно добавить специальный код, например:

@int daysLeft = CurrentTenant.TrialExpiryDate.Subtract(DateTimeOffset.Now).Days
@if (daysLeft <= 0) {
{
   <text>
   Trial period completed  
   </text>
}
else
{
   <text>
   You have @daysLeft days left of you trial
   </text>
}

Ответы [ 3 ]

9 голосов
/ 15 июня 2011

Конечно, это:

@{
    var one = 1;
    var two = one + one;
}

У Фила Хаака довольно популярное сообщение в блоге , обобщающее синтаксис Razor.

4 голосов
/ 15 июня 2011

Вы можете создать функции в бритве, что, как я полагаю, вы ищете.

Другое объяснение .

3 голосов
/ 15 июня 2011

Вы также можете использовать шаблонные бритвы.http://haacked.com/archive/2011/02/27/templated-razor-delegates.aspx

Как-то так должно работать.

public static class RazorExtensions
{
    public static HelperResult TrialMessage(this int days,
      Func<T, HelperResult> template)
    {
        return new HelperResult(writer =>
        {
            if (days <=0)
                template("Trial period completed").WriteTo(writer);
            else
                template("You have " + days  + " days left of you trial").WriteTo(writer);
        });
    }
}

В представлении используйте:

@int daysLeft = CurrentTenant.TrialExpiryDate.Subtract(DateTimeOffset.Now).Days
@daysLeft.TrialMessage(@<text>@item@</text>)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...