wake-up-neo.net

Wie erstelle ich eine Funktion in einer cshtml-Vorlage?

Ich muss eine Funktion erstellen, die nur in einer cshtml-Datei erforderlich ist. Sie können sich meine Situation als ASP.NET-Seitenmethoden vorstellen, bei denen es sich um min. Webservices handelt, die auf einer Seite implementiert sind, da sie nur eine Seite umfassen. Ich kenne HTML-Helfer (Erweiterungsmethoden), aber meine Funktion wird nur in einer cshtml-Datei benötigt. Ich weiß nicht, wie man eine Funktionssignatur in einer Ansicht erstellt Hinweis : Ich verwende die Razor Template Engine.

194
Saeed Neamati

Sie können die @helper Razor-Direktive verwenden:

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

Dann rufst du es so an:

@WelcomeMessage("John Smith")
258
Daniel Liuzzi

warum deklarieren Sie diese Funktion nicht einfach in der cshtml-Datei?

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

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

Wenn Ihre Methode kein HTML zurückgeben muss und etwas anderes tun muss, können Sie in Razor eine Lambda anstelle einer Hilfsmethode verwenden

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

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

<h2>Index</h2>

@Sum(3,4)
22

Werfen Sie einen Blick auf Deklarative Rasierhelfer

8
archil

Wenn Sie auf die globalen Variablen Ihrer Seite zugreifen möchten, können Sie dies tun:

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

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

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