displayname विशेषता बनाम प्रदर्शन विशेषता


जवाबों:


69

वे दोनों आप एक ही परिणाम दे लेकिन मुख्य अंतर यह है मुझे लगता है कि आप एक निर्दिष्ट नहीं कर सकते है ResourceTypeमें DisplayNameविशेषता। एमवीसी 2 में एक उदाहरण के लिए, आपको DisplayNameस्थानीयकरण के माध्यम से संसाधन प्रदान करने के लिए विशेषता को उप-वर्ग करना होगा । Displayविशेषता (MVC3 और .NET 4 में नया) ResourceType"बॉक्स से बाहर" संपत्ति के रूप में अधिभार का समर्थन करता है।


1
जानकार अच्छा लगा! .Resx फ़ाइल से प्रदर्शन मान को लोड करने के लिए एक कस्टम विशेषता को लागू करने के बारे में था, फिर इस प्रश्न पर हुआ। प्रदर्शन विशेषता स्थानीय अनुप्रयोग विकसित करते समय जाने का तरीका है।
कार्ल हेनरिक हेंके

148

DisplayNameDisplayNameमॉडल मेटाडेटा में सेट करता है। उदाहरण के लिए:

[DisplayName("foo")]
public string MyProperty { get; set; }

और यदि आप अपने विचार में निम्नलिखित का उपयोग करें:

@Html.LabelFor(x => x.MyProperty)

यह उत्पन्न करेगा:

<label for="MyProperty">foo</label>

Display वही करता है, लेकिन आपको अन्य मेटाडेटा गुण जैसे नाम, विवरण, ...

ब्रैड विल्सन के पास उन विशेषताओं को शामिल करने वाला एक अच्छा ब्लॉग पोस्ट है


1
+1 - शायद मेरी तुलना में बहुत अधिक सहायक (अब हटा दिया गया); मेरे लिए सुबह बहुत जल्दी :)
एंड्रास ज़ोल्टन

मुझे PropertyDescriptor और डिस्प्ले (नाम .. का उपयोग करते समय) की समस्या थी। @ descriptionptor.DisplayName पर कॉल करते समय, यह केवल DisplayName का उपयोग करके काम करेगा, डिस्प्ले (नाम ..) नहीं।
eaglei22

24

मुझे लगता है कि वर्तमान उत्तर वास्तविक महत्वपूर्ण और महत्वपूर्ण अंतरों को उजागर करने के लिए उपेक्षा कर रहे हैं और इच्छित उपयोग के लिए इसका क्या मतलब है। हालांकि वे दोनों कुछ स्थितियों में काम कर सकते हैं क्योंकि कार्यान्वयनकर्ता दोनों के समर्थन में बनाया गया है, उनके पास अलग-अलग उपयोग परिदृश्य हैं। दोनों गुण और विधियों की व्याख्या कर सकते हैं लेकिन यहाँ कुछ महत्वपूर्ण अंतर हैं:

DisplayAttribute

  • विधानसभा System.ComponentModel.DataAnnotationsमें नाम स्थान में परिभाषित किया गयाSystem.ComponentModel.DataAnnotations.dll
  • मापदंडों और क्षेत्रों पर इस्तेमाल किया जा सकता है
  • आपको अतिरिक्त गुण सेट करने देता है जैसे DescriptionयाShortName
  • संसाधनों के साथ स्थानीयकृत किया जा सकता है

DisplayNameAttribute

  • DisplayName System.ComponentModelनाम स्थान में हैSystem.dll
  • कक्षाओं और घटनाओं पर इस्तेमाल किया जा सकता है
  • संसाधनों के साथ स्थानीयकरण नहीं किया जा सकता है

असेंबली और नेमस्पेस इच्छित उपयोग के लिए बोलते हैं और स्थानीयकरण समर्थन बड़ा किकर है। DisplayNameAttribute.NET 2 के बाद से आसपास रहा है और ऐसा लगता है कि इसका उद्देश्य विरासत में मिलने वाली संपत्ति ग्रिड में डेवलपर घटकों और संपत्तियों के नामकरण के लिए है, अंत उपयोगकर्ताओं के लिए दिखाई देने वाली चीजों के लिए इतना नहीं है, जिन्हें स्थानीयकरण और इस तरह की आवश्यकता हो सकती है।

DisplayAttributeबाद में .NET 4 में पेश किया गया था और विशेष रूप से डेटा वर्गों के सदस्यों को लेबल करने के लिए डिज़ाइन किया गया था जो अंत-उपयोगकर्ता दृश्यमान होंगे, इसलिए यह डीटीओ, संस्थाओं और उस तरह की अन्य चीजों के लिए अधिक उपयुक्त है। मुझे यह दुर्भाग्यपूर्ण लगता है कि उन्होंने इसे सीमित कर दिया, इसलिए इसे कक्षाओं में उपयोग नहीं किया जा सकता है।

संपादित करें: ऐसा लगता है कि नवीनतम .NET कोर स्रोत DisplayAttributeअब कक्षाओं में भी उपयोग करने की अनुमति देता है।


13

शायद यह .net कोर के लिए विशिष्ट है, मैंने पाया कि DisplayName काम नहीं करेगा लेकिन Display (Name = ...) करता है। यह किसी अन्य समस्या निवारण में शामिल हो सकता है :)

//using statements
using System;
using System.ComponentModel.DataAnnotations;  //needed for Display annotation
using System.ComponentModel;  //needed for DisplayName annotation

public class Whatever
{
    //Property
    [Display(Name ="Release Date")]
    public DateTime ReleaseDate { get; set; }
}


//cshtml file
@Html.DisplayNameFor(model => model.ReleaseDate)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.