উত্তর:
এটি (কখন যদি হয়) কখন করা উচিত তা নিয়ে কোনও বিতর্ক রেখে যাওয়া, @ ফাংশনগুলি আপনি কীভাবে তা করেন।
@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>
}
তাহলে পার্থক্য টা কি?? পূর্ববর্তী পোস্ট অনুসারে @ হেল্পার এবং @ ফাংশন উভয়ই একটি জিনিস ভাগ করে নেবে - তারা ওয়েব পৃষ্ঠাগুলিতে কোড পুনরায় ব্যবহারের সম্ভাবনা তৈরি করে। তারা অন্য একটি জিনিসও সাধারণভাবে ভাগ করে - তারা প্রথম নজরে একই চেহারা, যা তাদের ভূমিকা সম্পর্কে কিছুটা বিভ্রান্তির কারণ হতে পারে। তবে এগুলি এক নয়। সংক্ষেপে, সহায়ক হ'ল রেজার সিনট্যাক্সের একটি পুনরায় ব্যবহারযোগ্য স্নিপেট যা কোনও পদ্ধতি হিসাবে উদ্ভাসিত হয় এবং এটি ব্রাউজারে এইচটিএমএল সরবরাহের উদ্দেশ্যে করা হয়, যেখানে একটি ফাংশন স্থির ইউটিলিটি পদ্ধতি যা আপনার ওয়েব পৃষ্ঠাগুলির অ্যাপ্লিকেশনটির মধ্যে যে কোনও জায়গা থেকে কল করা যেতে পারে। সহায়তার জন্য রিটার্নের ধরণটি সর্বদা হেল্পার রেজাল্ট হয়, তবে কোনও ফাংশনের জন্য রিটার্নের ধরণটি আপনি যা চান তা হ'ল।
@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>
@{ }
ফাংশন তৈরি করতে আপনি কেবল ব্লকটি ব্যবহার করতে পারেন:
@{
async Task<string> MyAsyncString(string input)
{
return Task.FromResult(input);
}
}
তারপরে আপনার রেজার পৃষ্ঠাতে:
<div>@(await MyAsyncString("weee").ConfigureAwait(false))</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>