2011-06-15 23 views
6

Realmente no he encontrado una solución de búsqueda a través de SO.ASP.NET MVC3 Navaja: ¿Es posible tener bloques de código C# sin @if o @foreach?

... y sospecho que realmente debería hacer esto en el modelo ...

pero es posible tener bloques de código C# donde el código adhoc se puede añadir por ejemplo:

@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> 
} 

Respuesta

9

seguro de que es:

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

Phil Haack tiene una muy popular blog post resumiendo sintaxis Razor.

+0

Gracias. He convertido el 99% de una aplicación a Razor y no me di cuenta de que podía hacerlo. :-) –

3

También podría usar los afeites de afeitar con plantilla. http://haacked.com/archive/2011/02/27/templated-razor-delegates.aspx

Algo así debería funcionar.

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

En vista del uso:

@int daysLeft = CurrentTenant.TrialExpiryDate.Subtract(DateTimeOffset.Now).Days 
@daysLeft.TrialMessage(@<text>@[email protected]</text>) 
+0

Gracias, esto parece demasiado demasiado ingenioso para mi cerebro. –

Cuestiones relacionadas