जवाबों:
जब (यदि कभी हो) पर किसी भी बहस को छोड़कर, यह किया जाना चाहिए, @functions यह है कि आप इसे कैसे करते हैं।
@functions {
// Add code here.
}
@functions
दृश्य विशिष्ट पीढ़ी कोड को व्यवस्थित करने के लिए एक अच्छी जगह है । बिंदु में मामला: उन बदसूरत ग्राहक टेम्पलेट्स-से-तार ..
आपका मतलब इनलाइन हेल्पर से है?
@helper SayHello(string name)
{
<div>Hello @name</div>
}
@SayHello("John")
रेजर के अंदर एक फ़ंक्शन को परिभाषित करना बहुत सरल है।
@functions {
public static HtmlString OrderedList(IEnumerable<string> items)
{ }
}
तो आप फ़ंक्शन को कहीं भी कॉल कर सकते हैं। पसंद
@Functions.OrderedList(new[] { "Blue", "Red", "Green" })
हालांकि, यह एक ही काम के माध्यम से helper
भी किया जा सकता है । उदहारण के लिए
@helper OrderedList(IEnumerable<string> items){
<ol>
@foreach(var item in items){
<li>@item</li>
}
</ol>
}
तो अंतर क्या है?? इस पिछली पोस्ट के अनुसार @helpers और @functions दोनों एक ही बात को आम तौर पर साझा करते हैं - वे वेब पेज के भीतर कोड का पुन: उपयोग करने की संभावना बनाते हैं। वे आम तौर पर एक और बात भी साझा करते हैं - वे पहली नज़र में समान दिखते हैं, जो कि उनकी भूमिकाओं के बारे में थोड़ा भ्रम पैदा कर सकता है। हालांकि, वे समान नहीं हैं। संक्षेप में, एक सहायक एक विधि के रूप में उजागर रेज़र साइटैक्स का पुन: प्रयोज्य स्निपेट है, और ब्राउज़र के लिए HTML प्रदान करने के लिए अभिप्रेत है, जबकि एक फ़ंक्शन स्थिर उपयोगिता विधि है जिसे आपके वेब पेज एप्लिकेशन के भीतर कहीं से भी कॉल किया जा सकता है। हेल्पर के लिए रिटर्न प्रकार हमेशा हेल्परइस्कूल होता है, जबकि एक फ़ंक्शन के लिए रिटर्न प्रकार जो भी आप चाहते हैं वह है।
@Functions
रूप में उपसर्ग को छोड़ कर फ़ंक्शन को कॉल करना @OrderedList(...)
।
आप इसे फंक के साथ भी कर सकते हैं
@{
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>
रेजर सिर्फ एक अस्थायी इंजन है।
आपको एक नियमित वर्ग बनाना चाहिए।
यदि आप रेजर पेज के अंदर एक विधि बनाना चाहते हैं, तो उन्हें एक @functions
ब्लॉक में रखें ।
आप उन्हें रेजर ब्लॉक (यानी ) में स्थानीय कार्यों के रूप में घोषित कर सकते हैं @{}
।
@{
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>