ASP.NET MVC3 Razor:没有@if或@foreach可以拥有C#代码块吗?

时间:2011-06-15 16:39:10

标签: asp.net-mvc-3 razor

我还没有真正找到通过SO搜索的解决方案。

......并怀疑我应该在模型中真正做到这一点......

但是可以使用C#代码块来添加adhoc代码,例如:

@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 个答案:

答案 0 :(得分:9)

当然是:

@{
    var one = 1;
    var two = one + one;
}
菲尔哈克有一个非常受欢迎的blog post总结Razor语法。

答案 1 :(得分:4)

您可以在razor中创建functions,这是我认为您正在寻找的。

Another explanation

答案 2 :(得分:3)

你也可以使用模板化的剃刀爆燃。 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>)