আমি রেজারে কোনও পদ্ধতি কীভাবে সংজ্ঞায়িত করব?


213

আমি রেজারে কোনও পদ্ধতি কীভাবে সংজ্ঞায়িত করব?


1
যারা বিকল্প দেখতে চেয়েছিলেন তাদের জন্য: এটি করার দুটি উপায় রয়েছে। এক. "@ ফাংশন" এবং অন্যটি "@ সহায়তা" ব্যবহার করছেন। তাদের মধ্যে পার্থক্যটি এখানে সুন্দরভাবে ব্যাখ্যা করা হয়েছে। mikesdotnetting.com/article/173/…
বি 1 কে

উত্তর:


310

এটি (কখন যদি হয়) কখন করা উচিত তা নিয়ে কোনও বিতর্ক রেখে যাওয়া, @ ফাংশনগুলি আপনি কীভাবে তা করেন।

@functions {

    // Add code here.

}

16
+1 ধন্যবাদ, এফওয়াইআই এটির কার্যকরীতা বলে। এমভিসি শহরের একমাত্র খেলা নয়। কিছু লোকেরা যেমন সহজ রেজার এবং ইউআরএললিখনের মতো লিখেন এমভিসি হিসাবে সামান্য উপকারের জন্য আইএমও
জেসন সেব্রিং

5
@functionsনির্দিষ্ট প্রজন্মের কোডটি দেখার জন্য একটি ভাল জায়গা । কেস পয়েন্ট: সেই
কুরুচিপূর্ণ

1
হাই ডেভিড, আমি কীভাবে একটি ফাইলে ফাংশনটি সংজ্ঞায়িত করতে পারি এবং এটি অন্য একটি ফাইলে ব্যবহার করতে পারি?
জর্জি কোভাচেভ

জর্জি, একে "রেজার এইচটিএমএল হেল্পার" বলা হয়। মূলত, আপনার কোড ফোল্ডারে সংজ্ঞায়িত একটি শ্রেণি, এখানে প্রস্তাবিত স্থিত পদ্ধতিগুলির সেট সহ: শ্রেণি asp.net/mvc/overview/older-versions-1/views/…
jeanie77

জর্জি, আপনি এখনই এটিকে ঘুরে আসতে পারেন ... তবে <কোড> @ ফাংশন </ কোড> বা <কোড> @ সাহায্যকারী </ কোড> রেজার অপশনগুলির জন্য আপনি নিজের অ্যাপ_কোডে Shared.cshtml এর মতো ফাইল ব্যবহার করতে পারেন ফোল্ডার। সেখানে আপনি <কোড> @ ফাংশনগুলি {} </code> বা <code> @ সহায়তা আমার ফাংশন () {} </code> সংজ্ঞায়িত করতে পারেন এবং সেগুলি আপনার অন্যান্য রেজার টেম্পলেটগুলিতে <code> @ Shared.MyFunction () < / কোড> যেখানে ফাইলটির নাম "নেমস্পেস" এর মতো
জেমি আলটিজার

194

আপনি ইনলাইন সহায়ক?

@helper SayHello(string name)
{
    <div>Hello @name</div>
}

@SayHello("John")

4
আমি এমন একটি পদ্ধতি নির্ধারণ করতে চাই যা কোনও এমভিসিএইচটিএমএল স্ট্রিংকে নয়, একটি সি # টাইপ দেয় returns
রুকিয়ান

4
@ রুকিয়ান, আপনি কেন কখনও ভিউতে সি # কোড লেখার দরকার পড়বেন? মানে একটি দৃষ্টিতে পদ্ধতি লেখার বিষয়টি কেবল ভুল! আপনি নিজের সি # কোডটি যেখানেই থাকুক না কেন পুরোপুরি জরিমানা করতে পারেন এবং তারপরে একটি রেজার ভিউতে পদ্ধতিটি আহ্বান করতে পারেন এবং ঠিক এটিই এইচটিএমএল সহায়করা করেন। এবং তাদের সর্বদা একটি এমভিসিএইচটিএমএল স্ট্রিং ফেরত আসার কথা নয়।
ডারিন দিমিত্রভ

1
@ রুকিয়ান, আপনি প্রথমে যা করতে চাইছেন তা ব্যাখ্যা করতে পারেন। এটি যাই হোক না কেন আমি নিশ্চিত যে ভিউতে সি # কোড লেখার চেয়ে আরও ভাল করার উপায় আছে :-)
ডারিন দিমিত্রভ

1
এটা সত্যিই দারুন! ধন্যবাদ দারিন ... ঠিক যখনই আমি মনে করি এমভিসি সম্পর্কে আমি সমস্ত কিছু জানি, আপনি এসেছিলেন এবং আমি নতুন কিছু শিখি :)
সেরজ সাগান


34

রেজারের ভিতরে কোনও ফাংশন সংজ্ঞায়িত করা খুব সহজ।

@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>
}

তাহলে পার্থক্য টা কি?? পূর্ববর্তী পোস্ট অনুসারে @ হেল্পার এবং @ ফাংশন উভয়ই একটি জিনিস ভাগ করে নেবে - তারা ওয়েব পৃষ্ঠাগুলিতে কোড পুনরায় ব্যবহারের সম্ভাবনা তৈরি করে। তারা অন্য একটি জিনিসও সাধারণভাবে ভাগ করে - তারা প্রথম নজরে একই চেহারা, যা তাদের ভূমিকা সম্পর্কে কিছুটা বিভ্রান্তির কারণ হতে পারে। তবে এগুলি এক নয়। সংক্ষেপে, সহায়ক হ'ল রেজার সিনট্যাক্সের একটি পুনরায় ব্যবহারযোগ্য স্নিপেট যা কোনও পদ্ধতি হিসাবে উদ্ভাসিত হয় এবং এটি ব্রাউজারে এইচটিএমএল সরবরাহের উদ্দেশ্যে করা হয়, যেখানে একটি ফাংশন স্থির ইউটিলিটি পদ্ধতি যা আপনার ওয়েব পৃষ্ঠাগুলির অ্যাপ্লিকেশনটির মধ্যে যে কোনও জায়গা থেকে কল করা যেতে পারে। সহায়তার জন্য রিটার্নের ধরণটি সর্বদা হেল্পার রেজাল্ট হয়, তবে কোনও ফাংশনের জন্য রিটার্নের ধরণটি আপনি যা চান তা হ'ল।


2
। নেটকর্মে আমার জন্য কাজ করে @Functionsউপসর্গটি বাদ দিয়ে ফাংশন কল করা @OrderedList(...)
মুফ্লিক্স

12

আপনি এটির মতো একটি ফানক দিয়ে এটি করতেও পারেন

@{
    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>

10

রেজারটি কেবল একটি টেম্প্লেটিং ইঞ্জিন।

আপনার নিয়মিত ক্লাস করা উচিত।

আপনি যদি রেজার পৃষ্ঠার অভ্যন্তরে কোনও পদ্ধতি তৈরি করতে চান তবে এগুলিকে একটি @functionsব্লকে রাখুন


1

আপনি এগুলি কেবল একটি রেজার ব্লকে (যেমন ) স্থানীয় ফাংশন হিসাবে ঘোষণা করতে পারেন @{}

@{
    int Add(int x, int y)
    {
        return x + y;
    }
}

<div class="container">
    <p>
        @Add(2, 5)
    </p>
</div>

0

@{ }ফাংশন তৈরি করতে আপনি কেবল ব্লকটি ব্যবহার করতে পারেন:

@{
    async Task<string> MyAsyncString(string input)
    {
        return Task.FromResult(input);
    }
}

তারপরে আপনার রেজার পৃষ্ঠাতে:

   <div>@(await MyAsyncString("weee").ConfigureAwait(false))</div>

0

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>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.