2013-07-11 6 views
14

Ho la funzione di sotto che vorrei essere disponibile a diverse visualizzazioni .cshtml nelle mie pagine web asp.net 2. Come posso rendere questa funzione disponibile per qualsiasi vista nell'applicazione (al contrario di una sola).Utilizzo di un Razor @ funzioni in diverse pagine Web (file .cshtml)

@functions { 

    public bool DisplayButton(String startDate, String endDate) 
    { 
     return Convert.ToDateTime(startDate) < DateTime.Now && Convert.ToDateTime(endDate) > DateTime.Now; 
    } 
} 
+0

Possibile duplicato, http://stackoverflow.com/questions/6347447/shared-mvc-razor-functions-in-several-views – Phas1c

+2

Non sto cercando di usare un helper. – Robert

risposta

20

Creare un file chiamato Functions.cshtml in App_Code e poi incolla il codice che hai nel file. Poi si può chiamare il metodo DisplayButton in qualsiasi file .cshtml dal prefisso con il nome del file:

var myBool = Functions.DisplayButton(DateTime.Now, DateTime.Now.AddDays(30)); 

Per ulteriori su come lavorare con le funzioni e aiutanti in ASP.NET Web Pages, leggere questo: http://www.mikesdotnetting.com/Article/173/[email protected]@Functions-In-WebMatrix

+0

Questo è esattamente ciò di cui avevo bisogno. Grazie. – Robert

+0

Funziona ancora adesso? –

+0

Ho questo messaggio di errore. CS0120: è richiesto un riferimento all'oggetto per il campo, il metodo o la proprietà non statici 'Functions.AgoDateString()' –

2

È possibile definire funzioni di supporto "globali" in un file nella directory Razor AppCode come descritto qui: http://weblogs.asp.net/scottgu/archive/2011/05/12/asp-net-mvc-3-and-the-helper-syntax-within-razor.aspx. Tuttavia, gli helper eseguono solo il rendering degli elementi della pagina; non possono restituire un valore (o più correttamente, il valore restituito è il codice HTML da rendere).

Se è necessario restituire un valore, la soluzione migliore è un metodo di estensione.

+3

La parola chiave function viene utilizzata per definire una funzione (metodo) che restituisce un valore definito dalla firma del metodo. La parola chiave helper definisce un modello Razor che esegue il rendering HTML. –

1

non vedo perché non si poteva avere una classe statica con un metodo statico e basta includerlo nella parte superiore di ogni vista e poi usarlo

+0

perché è necessario compilare ogni volta che si modifica la classe – MatteoSp