Yanıtlar:
Ne zaman (eğer varsa) yapılması gereken tartışmaları tek başına bırakarak, @fonksiyonlar bunu nasıl yaptığınızdır.
@functions {
// Add code here.
}
@functions
organize etmek iyi bir yerdir görünümü özgü nesil kodu. Durumda: bu çirkin istemci şablonları-dizeleri ..
Satır içi yardımcı mı demek istediniz?
@helper SayHello(string name)
{
<div>Hello @name</div>
}
@SayHello("John")
Jilet içinde bir fonksiyon tanımlamak çok basit.
@functions {
public static HtmlString OrderedList(IEnumerable<string> items)
{ }
}
Böylece herhangi bir yerde bir işlevi çağırabilirsiniz. Sevmek
@Functions.OrderedList(new[] { "Blue", "Red", "Green" })
Ancak, aynı çalışma da yapılabilir helper
. Örnek olarak
@helper OrderedList(IEnumerable<string> items){
<ol>
@foreach(var item in items){
<li>@item</li>
}
</ol>
}
Peki fark nedir ?? Bu önceki göre yazı hem @helpers ve @functions ortak olan hisse bir şey yapmak - onlar Web Sayfaları dahilinde bir ihtimal yeniden kod olun. Ortak bir şey daha paylaşıyorlar - ilk bakışta aynı görünüyorlar, bu da rolleri hakkında biraz karışıklığa neden olabilir. Ancak, aynı değiller. Temel olarak, bir yardımcı yöntem olarak kullanılan Razor sytnax'ın yeniden kullanılabilir bir snippetidir ve tarayıcıya HTML oluşturmak için tasarlanmıştır, bir işlev Web Sayfaları uygulamanızın herhangi bir yerinden çağrılabilen statik yardımcı yöntemdir. Bir yardımcı için dönüş türü her zaman HelperResult olurken, bir işlevin dönüş türü olmasını istediğiniz her şeydir.
@Functions
gibi öneki atlayarak işlevi @OrderedList(...)
çağırıyor.
Bunu böyle bir Func ile de yapabilirsiniz
@{
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>
Jilet sadece cazip bir motordur.
Normal bir sınıf oluşturmalısınız.
Ustura sayfasının içinde bir yöntem yapmak istiyorsanız, bunları bir @functions
bloğa koyun .
Bunları bir jilet bloğunda (yani ) yerel işlevler olarak bildirebilirsiniz @{}
.
@{
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>