ASP.NET MVC3 Razor:是否可以在没有@if或@foreach的情况下使用C#代码块?

6
我在 Stack Overflow 上没有找到解决方案。我猜应该在模型中解决这个问题,但是是否可能添加即席代码的 C# 代码块呢?请注意,保留 HTML 标记。
@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
当然可以:
@{
    var one = 1;
    var two = one + one;
}

菲尔·哈克(Phil Haack)撰写了一篇非常受欢迎的博客文章,总结了Razor语法。博客链接

谢谢。我已经将一个应用程序的99%转换为Razor,而且我没有意识到我可以这样做。 :-) - Mark Redman

4

谢谢,我不知道函数。 - Mark Redman

3
你也可以使用模板化的Razor委托。这里有一个相关链接: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>)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接