রেজারে টেরিনারি অপারেটরটি কীভাবে ব্যবহার করবেন (বিশেষত এইচটিএমএল বৈশিষ্ট্যগুলিতে)?


401

ওয়েব ফোর্বস ভিউ ইঞ্জিনের সাহায্যে আমি সাধারণত টার্নারি অপারেটরটি খুব সাধারণ শর্তসাপেক্ষে, বিশেষত এইচটিএমএল বৈশিষ্ট্যের মধ্যে ব্যবহার করব। উদাহরণ স্বরূপ:

<a class="<%=User.Identity.IsAuthenticated ? "auth" : "anon" %>">My link here</a>

উপরের কোডটি <a>ট্যাগটিকে শ্রেণীর দেবে authবা anonব্যবহারকারী প্রমাণীকৃত কিনা তার উপর নির্ভর করে।

রেজার ভিউ ইঞ্জিনের সাথে সমতুল্য বাক্য গঠন কী? যেহেতু রেজারের কোড এবং মার্কআপের মধ্যে কখন লাফানো এবং বাইরে বেরোনোর ​​সময় "জানতে" এইচটিএমএল ট্যাগগুলির প্রয়োজন, আমি বর্তমানে নিম্নলিখিতগুলির সাথে আটকে আছি:

@if(User.Identity.IsAuthenticated)  { <a class="auth">My link here</a> }
else { <a class="anon">My link here</a> }

এটি হ'ল একে হালকা, ভয়ানক

আমি এটির মতো কিছু করতে চাই তবে রেজারে কীভাবে তা বুঝতে লড়াই করছি:

<a class="@=User.Identity.IsAuthenticated ? "auth" : "anon";">My link here</a>

-

হালনাগাদ:

ইতিমধ্যে, আমি এই এইচটিএমএল সহায়তা তৈরি করেছি:

public static MvcHtmlString Conditional(this HtmlHelper html, Boolean condition, String ifTrue, String ifFalse)
{
  return MvcHtmlString.Create(condition ? ifTrue : ifFalse);
}

যা রেজারের কাছ থেকে এটিকে বলা যেতে পারে:

<a class="@Html.Conditional(User.Identity.IsAuthenticated, "auth", "anon")">My link here</a>

তবুও, আমি আশা করছি যে কোনও এক্সটেনশন পদ্ধতিতে মোড়ানো না হয়ে টার্নারি অপারেটরটি ব্যবহার করার কোনও উপায় আছে।


ঠিক "বেস্ট অনুশীলন" এর বিষয় হিসাবে আমি বিশ্বাস করি যে আপনি সাহায্যকারী ইত্যাদির জন্য IHtmlStringপদ্ধতিটি নিয়ে ফিরতে হবে new HtmlString("Some stuff here");...
জাস্টিন সলিজ



উত্তর:


767

আপনার @()এক্সপ্রেশন সিনট্যাক্সটি ব্যবহার করতে সক্ষম হওয়া উচিত :

<a class="@(User.Identity.IsAuthenticated ? "auth" : "anon")">My link here</a>

আমার কাছে রেজার ইনস্টল নেই, তবে আমি ভুল হতে পারি।


60
রেজার সিনট্যাক্সের এখানে একটি সহজ রেফারেন্স: সি # রেজার সিনট্যাক্স দ্রুত রেফারেন্স
রায়ান লন্ডি

<a class=@(User.Identity.IsAuthenticated? "aut": "anon")> আমার লিঙ্কটি এখানে </a>
বিএলএল

আমি কি এই যুক্তিতে && অপারেটর যুক্ত করতে পারি?
আলেয়ারিয়া

58

সংযোজন:

গুরুত্বপূর্ণ ধারণাটি হ'ল আপনি নিজের রেজার কোডটিতে একটি অভিব্যক্তি মূল্যায়ন করছেন। এটি করার সর্বোত্তম উপায় (যদি উদাহরণস্বরূপ, আপনি একটি অগ্রণী লুপে রয়েছেন) জেনেরিক পদ্ধতি ব্যবহার করছে।

রেজারে জেনেরিক পদ্ধতিতে কল করার সিনট্যাক্সটি হ'ল:

@(expression)

এই ক্ষেত্রে, অভিব্যক্তিটি হ'ল:

User.Identity.IsAuthenticated ? "auth" : "anon"

অতএব, সমাধানটি হ'ল:

@(User.Identity.IsAuthenticated ? "auth" : "anon")

এই কোডটি কেবল এইচটিএমএল বৈশিষ্ট্যের জন্য নয়, রেজারের যে কোনও জায়গায় ব্যবহার করা যেতে পারে।

সি # রেজার সিনট্যাক্স কুইক রেফারেন্সের জন্য ফিল ক্যাকেরলেসার মন্তব্য দেখুন (ফিল হ্যাকের ব্লগ)।


মূল উত্তরে অনুরূপ মন্তব্য যুক্ত করার পরে কেবলমাত্র আপনার সংযোজনটি লক্ষ্য করেছেন।
বিএলএল

22

একটি সহজ সংস্করণ, সহজ চোখের জন্য!

@(true?"yes":"no")

11
এটা সহজ নয়। বিভিন্ন মান সহ একই উত্তর
ডেভ রায়েল

4
-1 ডেভ রায়েল ঠিক, বিভিন্ন মান সহ একই কোড
জ্যাকস

6
এটি আসলে টার্নারি অপারেটরটি ব্যাখ্যা করে। সুতরাং এটি সমাধানের জন্য একটি ভাল আসক্তি যা শর্তে সত্য এবং মিথ্যা কোথায় তা বলে না।
মরিজিও ডেনমার্ক ইন

3
আমিও তাই ভাবছিলাম. বিকাশকারী হিসাবে আমাদের পরিষ্কার উত্তর দেওয়ার অনুমতি দেওয়া হয় .. কখনও কখনও।
দানব এক্স

17

আপনারা যারা ভিবি রেজারের সাহায্যে এএসপিএনটি ব্যবহার করেন তাদের ক্ষেত্রেও টার্নারি অপারেটর সম্ভব।

এটি অবশ্যই একটি ক্ষুরের অভিব্যক্তির ভিতরে থাকতে হবে:

@(Razor_Expression)

এবং টার্নারি অপারেটর নিম্নলিখিত হিসাবে কাজ করে:

If(BooleanTestExpression, "TruePart", "FalsePart")

ভিবি রেজারের সাথে এখানে প্রদর্শিত একই কোড উদাহরণটি দেখতে এটির মতো দেখাচ্ছে:

<a class="@(If(User.Identity.IsAuthenticated, "auth", "anon"))">My link here</a>

দ্রষ্টব্য: একটি পাঠ্য এক্সপ্রেশন লেখার সময় মনে রাখবেন যে বুলিয়ান প্রতীকগুলি সি # এবং ভিবি এর মধ্যে এক নয়।


1

আমার সমস্যায় আমি চাই <a>text</a>আমার ভিউয়ের অভ্যন্তরে অ্যাঙ্কারের পাঠ্যটি কোনও মানের উপর ভিত্তি করে লেখা হোক এবং সেই পাঠ্যটি পুনরুদ্ধার করা ফর্মApp string Resources

সুতরাং, @()এটি সমাধান

<a href='#'>
      @(Model.ID == 0 ? Resource_en.Back : Resource_en.Department_View_DescartChanges)
</a>

যদি পাঠ্যটি এটি App string Resourcesব্যবহার না করে

@(Model.ID == 0 ? "Back" :"Descart Changes")

0

আপনি এই পদ্ধতিটিও ব্যবহার করতে পারেন:

<input type="text" class="@(@mvccondition ? "true-class" : "false-class")">

এই চেষ্টা করুন .. শুভকামনা ধন্যবাদ।


এমভিসি শর্তের সাথে @ যুক্ত করার কোনও দরকার আছে কি? আমি এটি মনে করি না, কারণ @ ইতিমধ্যে শুরুতে ব্যবহার করা হয়েছে।
মুবাশার শাহজাদ

@ () এর অধীনে @ ব্যবহার করার দরকার নেই
একানশ মান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.