সিএসটিএমএল টেমপ্লেটে একটি ফাংশন কীভাবে তৈরি করবেন?


219

আমার একটি ফাংশন তৈরি করতে হবে যা কেবলমাত্র একটি সিএসটিএমএল ফাইলের মধ্যে প্রয়োজনীয়। আপনি আমার পরিস্থিতিকে এএসপি.এনইটি পৃষ্ঠার পদ্ধতি হিসাবে ভাবতে পারেন, যা কোনও পৃষ্ঠায় প্রয়োগ করা নূন্যতম ওয়েব পরিষেবাদি, কারণ সেগুলি একটি পৃষ্ঠায় যায়। আমি এইচটিএমএল সহায়ক (এক্সটেনশন পদ্ধতি) সম্পর্কে জানি, তবে আমার ফাংশনটি কেবলমাত্র একটি সিএসটিএমএল ফাইলের প্রয়োজন। আমি জানিনা কীভাবে কোনও দৃশ্যের ভিতরে কোনও ফাংশন স্বাক্ষর তৈরি করতে হয়। দ্রষ্টব্য : আমি রেজার টেম্পলেট ইঞ্জিন ব্যবহার করছি।

উত্তর:


279

আপনি @ হেল্পার রেজার নির্দেশটি ব্যবহার করতে পারেন:

@helper WelcomeMessage(string username)
{
    <p>Welcome, @username.</p>
}

তারপরে আপনি এটিকে অনুরোধ করুন:

@WelcomeMessage("John Smith")

13
আপনি @functionsপদ্ধতিগুলির মধ্যে ট্যাগ রাখতে পারবেন না , সুতরাং আমার এই উত্তরটি পছন্দ like
jfren484

1
হ্যাঁ এটি কোনও ফাংশন ঘোষণার চেয়ে অনেক ভাল। আরও অনেক সোজা এগিয়ে।
মুগলিও

2
তবে আপনি ভেরিয়েবলগুলি (সুতরাং শব্দটির ফাংশন) ফিরিয়ে দিতে পারবেন না
পল

@ পল আমি আপনার বুঝতে চাইছি তা বুঝতে পারছি না।
ড্যানিয়েল লিউজি

2
এসপ নেট কোর কি @ হেল্পারকে সমর্থন করে?
MuM6oJuM6o

411

কেন কেবল সেই ফাংশনটি সিএসটিএমএল ফাইলের মধ্যে ঘোষণা করবেন না?

@functions{
    public string GetSomeString(){
        return string.Empty;
    }
}

<h2>index</h2>
@GetSomeString()

32
এটি উত্তর হিসাবে চিহ্নিত করা উচিত, কারণ @ ফাংশন নির্দেশাবলী বিশেষত ওপি প্রয়োজনীয়তা পূরণ করে। হেল্পার্স বৈশিষ্ট্যটি একটি অ্যাপ_কোড ডিরেক্টরিতে @ হেল্পার নির্দেশিকা সহ ফাইলটি রেখে একাধিক টেম্পলেট ফাইল জুড়ে ভাগ ব্যবহারের উদ্দেশ্যে for অন্যদিকে, @ ফাংশনগুলির নির্দেশাবলী কোনও ফাংশনটি কেবলমাত্র এটি ঘোষণা করে এমন টেমপ্লেট দ্বারা ব্যবহারের অনুমতি দেয়।
জন ডেভিস

7
এছাড়াও নোট সাহায্যকারীরা ইতিমধ্যে অন্যান্য রেজার সাহায্যকারীদের মতো স্ট্রিংগুলি ফিরিয়ে আনতে ওরিয়েন্টেড বলে মনে হচ্ছে এবং সুতরাং functionsসমাধানটি টোয়ার রিটার্নের ধরণের জন্য আরও নমনীয়তা সরবরাহ করে। উভয় উত্তর আমার বইয়ে +1 পায় যদিও এটি উভয়ই তথ্যের দরকারী টিডব্যাট।
অ্যারোনলএস

8
@ অ্যারোনলএস ন্যায্য হওয়ার জন্য, সাহায্যকারীরা স্ট্রিংগুলি ফিরিয়ে দেয় না তবে আইএইচটিএমএল স্ট্রিং, যা আপনার জন্য এইচটিএমএল এনকোডিংয়ের যত্ন নেয় এবং আপনার অ্যাপ্লিকেশনকে এক্সএসএস আক্রমণ থেকে রক্ষা করে। সহায়করা আপনাকে সাহায্যকারী নিজেই রেজার সিনট্যাক্সের সুবিধা দেয় যা আপনি ফাংশনগুলির সাথে হারাতে পারেন। অন্য কথায়, <p>Welcome, @username.</p>বনাম return new HtmlString("<p>Welcome, " + Html.Encode(username) + ".</p>");
ড্যানিয়েল লিউজি

9
@helperযদিও একটি একক দর্শন ব্যবহার করে এটি অন্য দর্শনে উপলভ্য করে না। যেহেতু আমি @ ভাল্পারকে পছন্দ করি তা হ'ল আপনি আপনার কোঁকড়া ধনুর্বন্ধনীগুলির মধ্যে এইচটিএমএল রাখতে পারেন। @functions(সহজেই) আপনাকে এটি করতে দেয় না।
jfren484

5
কেবল রেকর্ডের জন্য: উভয়ই @helperএবং @functionsঅনেকগুলি মতামতের মধ্যে ভাগ করা যায় এবং উভয়ই একক দর্শন হিসাবে ঘোষণা করা এবং ব্যবহার করা যেতে পারে (এবং আমি ব্যক্তিগতভাবে উভয় ভাগ করে নেওয়া / একক দৃশ্যে তাদের জন্য ব্যবহার খুঁজে পেয়েছি)। আইএমএইচও তাদের মধ্যে একমাত্র ব্যবহারিক পার্থক্যটি হ'ল কোনও ভিউ সহায়ক সহায়ক রেন্ডার এইচটিএমএল স্নিপেটগুলি (বা, আরও উপযুক্ত, HelperResultউদাহরণ) ফেরত দেওয়ার জন্য সিনট্যাকটিক চিনি যুক্ত করে , যখন একটি ভিউ ফাংশন সাধারণত সাধারণ রেফারেন্স বা মানের ধরণের প্রত্যাবর্তনের জন্য কেবল কার্যকর।
আরএসএনএন

25

যদি আপনার পদ্ধতিতে এইচটিএমএল ফিরে আসতে হয় না এবং অন্য কিছু করতে হয় তবে আপনি রেজারে সহায়ক পদ্ধতির পরিবর্তে ল্যাম্বডা ব্যবহার করতে পারেন

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";

    Func<int,int,int> Sum = (a, b) => a + b;
}

<h2>Index</h2>

@Sum(3,4)

3
এটি কাজ করে, তবে এটি সরলতা থেকে অনেক দূরে। আমার পবিত্র গ্রন্থটি সরলতা;)। তবে বিকল্প সরবরাহ করার জন্য আপনাকে ধন্যবাদ।
সা Saeedদ নেমতি

এটি কার্যকর যদি আপনার ফাংশনে পৃষ্ঠার গ্লোবাল ভেরিয়েবলগুলি অ্যাক্সেস করার প্রয়োজন হয় তবে এটি করার অন্য কোনও উপায় আছে কি? : /
আলেকজান্দ্রে ডাব্রিকোর্ট


1

আপনি যদি নিজের পৃষ্ঠার গ্লোবাল ভেরিয়েবলগুলি অ্যাক্সেস করতে চান তবে আপনি এটি করতে পারেন:

@{
    ViewData["Title"] = "Home Page";

    var LoadingButtons = Model.ToDictionary(person => person, person => false);

    string GetLoadingState (string person) => LoadingButtons[person] ? "is-loading" : string.Empty;
}

যেহেতু সি # 7.0 এটি একমাত্র সঠিক এবং সঠিক উত্তর। GetLoadingState()এখানে স্থানীয় ফাংশন।
ওল্ফ্রেভো বিড়ালরা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.