web-dev-qa-db-fra.com

Comment créer une fonction dans un modèle cshtml?

J'ai besoin de créer une fonction qui n'est nécessaire que dans un fichier cshtml. Vous pouvez penser à ma situation en tant que méthodes de page ASP.NET, qui sont des services Web min implémentés dans une page, car elles sont limitées à une page. Je connais les assistants HTML (méthodes d'extension), mais ma fonction est simplement requise dans un fichier cshtml. Je ne sais pas comment créer une signature de fonction dans une vue . Remarque : J'utilise le moteur de modèle Razor.

194
Saeed Neamati

Vous pouvez utiliser la directive @helper Razor:

@helper WelcomeMessage(string username)
{
    <p>Welcome, @username.</p>
}

Ensuite, vous l'invoquez comme ceci:

@WelcomeMessage("John Smith")
258
Daniel Liuzzi

pourquoi ne pas simplement déclarer cette fonction dans le fichier cshtml?

@functions{
    public string GetSomeString(){
        return string.Empty;
    }
}

<h2>index</h2>
@GetSomeString()
370
user156888

Si votre méthode ne doit pas renvoyer de code HTML et doit faire autre chose, vous pouvez utiliser une méthode lambda au lieu d'une méthode auxiliaire dans Razor

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";

    Func<int,int,int> Sum = (a, b) => a + b;
}

<h2>Index</h2>

@Sum(3,4)
22

Jetez un oeil à Declarative Razor Helpers

8
archil

Si vous souhaitez accéder aux variables globales de votre page, vous pouvez le faire:

@{
    ViewData["Title"] = "Home Page";

    var LoadingButtons = Model.ToDictionary(person => person, person => false);

    string GetLoadingState (string person) => LoadingButtons[person] ? "is-loading" : string.Empty;
}
0
Alexandre Daubricourt