Wie definiere ich eine Methode in Razor?
Wie definiere ich eine Methode in Razor?
Antworten:
Lassen Sie alle Debatten darüber, wann (wenn überhaupt) es getan werden sollte, @functions so, wie Sie es tun.
@functions {
// Add code here.
}
@functions
ist ein guter Ort, um den Ansichtsspezifischen Generierungscode zu organisieren . Ein
Du meinst Inline-Helfer?
@helper SayHello(string name)
{
<div>Hello @name</div>
}
@SayHello("John")
Es ist sehr einfach, eine Funktion im Rasierer zu definieren.
@functions {
public static HtmlString OrderedList(IEnumerable<string> items)
{ }
}
Sie können die Funktion also überall aufrufen. Mögen
@Functions.OrderedList(new[] { "Blue", "Red", "Green" })
Dieselbe Arbeit kann jedoch auch durchgeführt werden helper
. Als Beispiel
@helper OrderedList(IEnumerable<string> items){
<ol>
@foreach(var item in items){
<li>@item</li>
}
</ol>
}
Was ist der Unterschied? Laut diesem vorherigen Beitrag haben sowohl @helpers als auch @functions eines gemeinsam: Sie ermöglichen die Wiederverwendung von Code innerhalb von Webseiten. Sie haben noch etwas gemeinsam: Sie sehen auf den ersten Blick gleich aus, was zu Verwirrung bei ihren Rollen führen kann. Sie sind jedoch nicht gleich. Im Wesentlichen ist ein Helfer ein wiederverwendbarer Ausschnitt aus Razor sytnax, der als Methode verfügbar gemacht wird, und dient zum Rendern von HTML im Browser, während eine Funktion eine statische Dienstprogrammmethode ist, die von überall in Ihrer Webseitenanwendung aufgerufen werden kann. Der Rückgabetyp für einen Helfer ist immer HelperResult, während der Rückgabetyp für eine Funktion so ist, wie Sie es möchten.
@Functions
Präfixes, wie es @OrderedList(...)
für mich in .netcore funktioniert.
Sie können es auch mit einem Func wie diesem machen
@{
var getStyle = new Func<int, int, string>((width, margin) => string.Format("width: {0}px; margin: {1}px;", width, margin));
}
<div style="@getStyle(50, 2)"></div>
Razor ist nur ein Template-Motor.
Sie sollten eine reguläre Klasse erstellen.
Wenn Sie eine Methode innerhalb einer Razor-Seite erstellen möchten, fügen Sie sie in einen @functions
Block ein .
Sie können sie einfach als lokale Funktionen in einem Rasierklingenblock deklarieren (dh @{}
).
@{
int Add(int x, int y)
{
return x + y;
}
}
<div class="container">
<p>
@Add(2, 5)
</p>
</div>
MyModelVm.cs
public class MyModelVm
{
public HttpStatusCode StatusCode { get; set; }
}
Index.cshtml
@model MyNamespace.MyModelVm
@functions
{
string GetErrorMessage()
{
var isNotFound = Model.StatusCode == HttpStatusCode.NotFound;
string errorMessage;
if (isNotFound)
{
errorMessage = Resources.NotFoundMessage;
}
else
{
errorMessage = Resources.GeneralErrorMessage
}
return errorMessage;
}
}
<div>
@GetErrorMessage()
</div>