रेज़र (विशेष रूप से HTML विशेषताओं पर) में टर्नरी ऑपरेटर का उपयोग कैसे करें?


401

WebForms व्यू इंजन के साथ, मैं आमतौर पर बहुत ही साधारण कंडीशंस के लिए, विशेष रूप से HTML विशेषताओं के लिए टर्नेरी ऑपरेटर का उपयोग करता हूँ। उदाहरण के लिए:

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

उपर्युक्त कोड <a>टैग को उपयोगकर्ता के प्रमाणित होने पर authया anonउसके आधार पर एक वर्ग देगा ।

रेजर व्यू इंजन के साथ बराबर सिंटैक्स क्या है? क्योंकि रेजर को कोड और मार्कअप में कूदने के लिए "टैग" करने के लिए HTML टैग की आवश्यकता होती है, मैं वर्तमान में निम्नलिखित के साथ फंस गया हूं:

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

-

अपडेट करें:

इस बीच, मैंने यह HtmlHelper बनाया है:

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>

फिर भी, मैं उम्मीद कर रहा हूं कि एक विस्तार विधि में इसे लपेटकर वापस गिरने के बिना टर्नरी ऑपरेटर का उपयोग करने का एक तरीका है।


बस "बेस्ट प्रैक्टिस" की बात के रूप में, मेरा मानना ​​है कि आपको IHtmlStringnew HtmlString("Some stuff here");
हेल्पर्स



जवाबों:


767

आपको @()अभिव्यक्ति सिंटैक्स का उपयोग करने में सक्षम होना चाहिए :

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

मेरे पास रेजर स्थापित नहीं है, हालांकि, इसलिए मैं गलत हो सकता हूं।


60
यहाँ रेजर सिंटैक्स का एक आसान संदर्भ दिया गया है: C # रेज़र सिंटैक्स क्विक रेफ़रेंस
रयान लूनी

<a class=@(User.Identity.IsAuthenticated? "auth": "anon")> मेरा लिंक यहाँ </a>
BiLaL

क्या मैं इस लॉजिक में && ऑपरेटर जोड़ सकता हूं?
alerya

58

परिशिष्ट:

महत्वपूर्ण अवधारणा यह है कि आप अपने रेजर कोड में एक अभिव्यक्ति का मूल्यांकन कर रहे हैं। ऐसा करने का सबसे अच्छा तरीका (यदि, उदाहरण के लिए, आप एक फ़ॉरेस्ट लूप में हैं) एक सामान्य विधि का उपयोग कर रहा है।

रेजर में एक सामान्य विधि को कॉल करने के लिए सिंटैक्स है:

@(expression)

इस मामले में, अभिव्यक्ति है:

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

इसलिए, समाधान है:

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

इस कोड को रेजर में कहीं भी इस्तेमाल किया जा सकता है, न कि केवल एक html विशेषता के लिए।

सी # रेजर सिंटैक्स क्विक रेफरेंस (फिल हैक के ब्लॉग) के लिए @Kyralessa की टिप्पणी देखें।


मुख्य उत्तर के समान टिप्पणियों को जोड़ने के बाद बस अपने परिशिष्ट पर ध्यान दिया।
BiLaL

22

आसान आंखों के लिए एक सरल संस्करण!

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

11
यह सरल नहीं है। विभिन्न मूल्यों के साथ एक ही उत्तर है
डेव राएल

4
-1 डेव राईल सही है, यह एक ही कोड है जिसमें अलग-अलग मूल्य हैं
जैक

6
यह वास्तव में टर्नरी ऑपरेटर को समझाता है। तो यह समाधान के लिए एक अच्छी लत है जो यह नहीं कहता है कि स्थिति में सही और गलत कहां है।
मॉरिजियो डेनमार्क

3
मुझे ऐसा लगा। डेवलपर्स के रूप में हमें स्पष्ट उत्तर देने की अनुमति है .. कभी-कभी।
राक्षस एक्स

17

आप में से जो वीबी रेजर के साथ ASP.net का उपयोग करते हैं, उनके लिए टर्नरी ऑपरेटर भी संभव है।

यह होना चाहिए, साथ ही, एक उस्तरा अभिव्यक्ति के अंदर:

@(Razor_Expression)

और टर्नरी ऑपरेटर निम्नानुसार काम करता है:

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

VB रेजर के साथ यहां दिखाया गया समान कोड उदाहरण इस तरह दिखता है:

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

नोट: जब TextExpression लिखते हैं तो याद रखें कि बूलियन प्रतीक C # और VB के बीच समान नहीं हैं।


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")">

यह कोशिश करो .. शुभकामनाएँ धन्यवाद।


क्या mvc हालत के साथ @ जोड़ने की कोई आवश्यकता है? मुझे ऐसा नहीं लगता, क्योंकि @ का उपयोग शुरू में ही किया जा चुका है।
मुबाशर शहजाद

@ के तहत @ () का उपयोग करने की कोई आवश्यकता नहीं है
Aikansh मान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.