Bagaimana cara menentukan metode dalam Razor?
Bagaimana cara menentukan metode dalam Razor?
Jawaban:
Meninggalkan sendiri segala perdebatan tentang kapan (jika pernah) itu harus dilakukan, @functions adalah bagaimana Anda melakukannya.
@functions {
// Add code here.
}
@functions
adalah tempat yang baik untuk mengatur tampilan kode generasi tertentu . Contoh kasus: templates-from-string klien jelek itu
Maksudmu inline helper?
@helper SayHello(string name)
{
<div>Hello @name</div>
}
@SayHello("John")
Sangat sederhana untuk mendefinisikan fungsi di dalam silet.
@functions {
public static HtmlString OrderedList(IEnumerable<string> items)
{ }
}
Jadi, Anda dapat memanggil fungsi di mana saja. Suka
@Functions.OrderedList(new[] { "Blue", "Red", "Green" })
Namun, pekerjaan yang sama juga bisa dilakukan helper
. Sebagai contoh
@helper OrderedList(IEnumerable<string> items){
<ol>
@foreach(var item in items){
<li>@item</li>
}
</ol>
}
Jadi apa bedanya ?? Menurut posting sebelumnya ini @helpers dan @functions berbagi satu hal yang sama - mereka membuat kode menggunakan kembali kemungkinan di dalam Halaman Web. Mereka juga berbagi kesamaan - mereka terlihat sama pada pandangan pertama, yang mungkin menyebabkan sedikit kebingungan tentang peran mereka. Namun, keduanya tidak sama. Intinya, helper adalah cuplikan Razt sytnax yang dapat digunakan kembali sebagai metode, dan dimaksudkan untuk merender HTML ke browser, sedangkan fungsi adalah metode utilitas statis yang dapat dipanggil dari mana saja dalam aplikasi Halaman Web Anda. Tipe pengembalian untuk helper selalu HelperResult, sedangkan tipe kembali untuk fungsi adalah apa pun yang Anda inginkan.
@Functions
awalan sebagai @OrderedList(...)
berfungsi untuk saya di .netcore.
Anda juga bisa melakukannya dengan Fungsi seperti ini
@{
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 hanyalah mesin templating.
Anda harus membuat kelas reguler.
Jika Anda ingin membuat metode di dalam halaman Razor, letakkan di @functions
blokir .
Anda cukup mendeklarasikannya sebagai fungsi lokal di blok silet (yaitu @{}
).
@{
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>