@ Html.DisplayFor सिंटैक्स के लिए क्या है?


223

मैं समझता हूं कि रेजर में @Html नीट चीजों का एक गुच्छा करता है, जैसे लिंक, इनपुट आदि के लिए HTML उत्पन्न करता है।

लेकिन मुझे DisplayFor फंक्शन नहीं मिला ...

मैं क्यों लिखूंगा:

@Html.DisplayFor(model => model.Title)

जब मैं लिख सकता था:

@Model.Title

जवाबों:


217

Html.DisplayFor() प्रॉपर्टी के प्रकार से मेल खाने वाले DisplayTemplate को प्रस्तुत करेगा।

अगर यह किसी भी नहीं मिल सकता है, मुझे लगता है कि यह आह्वान करता है .ToString()


यदि आप डिस्प्ले टेम्प्लेट के बारे में नहीं जानते हैं, तो वे आंशिक विचार हैं जो एक DisplayTemplatesफ़ोल्डर में एक नियंत्रक से जुड़े दृश्य फ़ोल्डर में रखे जा सकते हैं ।


उदाहरण:

यदि आप निम्नलिखित कोड के साथ अपने विचार फ़ोल्डर (जैसे , या ) String.cshtmlके DisplayTemplatesफ़ोल्डर के अंदर एक दृश्य बनाते हैं :HomeShared

@model string

@if (string.IsNullOrEmpty(Model)) {
   <strong>Null string</strong>
}
else {
   @Model
}

तब @Html.DisplayFor(model => model.Title)(यह मानते हुए कि Titleएक स्ट्रिंग है) टेम्पलेट का उपयोग करेगा और <strong>Null string</strong>यदि स्ट्रिंग शून्य है, या खाली है तो डिस्प्ले करेगा ।


6
मुझे लगता है कि ज्यादातर मामलों में, आदिम प्रकार के लिए DisplayFor का उपयोग करने के लिए बेकार लगता है। उदाहरण के लिए, DateTime दिनांक / समय प्रदर्शित करेगा भले ही समय भाग बेकार हो। यदि आप मॉडल पर प्रॉपर्टी की विशेषताओं में डेटटाइम प्रकार के लिए "{0: d}" का एक प्रारूप स्ट्रिंग निर्दिष्ट कर सकते हैं, तो DisplayFor संभवतः अधिक उपयोगी हो सकता है।
enorl76

6
@ enorl76 आप कर सकते हैं। देखें Daveo का जवाब
बर्ट्रेंड मारोन

3
आप किसी तिथि-निर्धारण तिथि-निर्धारण के लिए EditorFor टेम्पलेट के लिए jQuery दिनांक पिकर जोड़ सकते हैं, उदाहरण के लिए हमेशा दिनांक पिकर दिखाने के लिए।
ज़ाचरी स्कॉट

4
यह मुझे ऐसा लगता है कि सामान्य रूप से इसका उपयोग करने के लिए यह ओवर-इंजीनियरिंग है, लेकिन जब आप कुछ मॉडल विशेषताओं के लिए आउटपुट को प्रारूपित करना चाहते हैं तो आपको इसका उपयोग करना चाहिए। उपयोगी प्रश्न और उत्तर दोस्तों, धन्यवाद। + 1s सभी दौर में।
रोबिन विंसलो

यदि आपके पास एक ही नाम के दो मॉडल हैं तो क्या होगा?
हॉल्टिंगटन

77

मुझे लगता है कि मुख्य लाभ तब होगा जब आप अपने स्वयं के डिस्प्ले टेम्प्लेट परिभाषित करेंगे, या डेटा एनोटेशन का उपयोग करेंगे।

इसलिए उदाहरण के लिए यदि आपका शीर्षक एक तारीख था, तो आप परिभाषित कर सकते हैं

[DisplayFormat(DataFormatString = "{0:d}")]

और फिर प्रत्येक पृष्ठ पर यह एक सुसंगत तरीके से मूल्य प्रदर्शित करेगा। अन्यथा आपको कई पृष्ठों पर प्रदर्शन को अनुकूलित करना पड़ सकता है। तो यह सादे तार के लिए ज्यादा मदद नहीं करता है, लेकिन यह मुद्राओं, तिथियों, ईमेल, यूआरएल, आदि के लिए मदद करता है।

उदाहरण के लिए एक ईमेल पते के बजाय एक सादे तार होने के कारण यह एक लिंक के रूप में दिखाई दे सकता है:

<a href="mailto:@ViewData.Model">@ViewData.TemplateInfo.FormattedModelValue</a>

28

DisplayForटेम्प्लेटिंग के लिए भी उपयोगी है। आप अपने मॉडल के लिए एक खाका लिख ​​सकते हैं, और ऐसा कुछ कर सकते हैं:

@Html.DisplayFor(m => m)

के समान @Html.EditorFor(m => m)। यह DRY प्रिंसिपल के लिए उपयोगी है ताकि आपको एक ही मॉडल के लिए एक ही डिस्प्ले लॉजिक बार-बार लिखना न पड़े।

MVC2 टेम्प्लेट पर इस ब्लॉग पर एक नज़र डालें। यह अभी भी MVC3 पर लागू है:

http://www.dalsoft.co.uk/blog/index.php/2010/04/26/mvc-2-templates/


यदि आपके मॉडल में डेटा एनोटेशन है तो यह उपयोगी है। उदाहरण के लिए, यदि मॉडल पर संपत्ति को EmailAddressडेटा एनोटेशन से सजाया गया है , DisplayForतो इसे एक mailto:लिंक के रूप में प्रस्तुत किया जाएगा ।


8
@Html.DisplayFor(m => m)को भी सरल बनाया जा सकता है @Html.DisplayForModel()
ब्रेंट बॉबी

लम्दा अभिव्यक्ति क्या है (एम => एम)? पहला मीटर किसका प्रतिनिधित्व करता है?
आर्कियन

1
पहला एम पैरामीटर का नाम है
सिनास्टेटिक

1
@ मैजिक- c0d3r पहला m पेज की मॉडल ऑब्जेक्ट है। यही कि लैम्ब्डा अभिव्यक्ति में प्रयोग किया जाता है
डॉन चेडल

4

कुछ समय के लिए अपने लिए एक उत्तर की तलाश के बाद, मुझे कुछ मिल सका। सामान्य तौर पर अगर हम इसे केवल एक संपत्ति के लिए उपयोग कर रहे हैं तो यह समान दिखाई देता है, भले ही हम उत्पन्न HTML का "व्यू सोर्स" करें नीचे उदाहरण के लिए HTML उत्पन्न होता है, जब मैं केवल अपनी कक्षा के लिए नाम संपत्ति प्रदर्शित करना चाहता हूं

    <td>
    myClassNameProperty
    </td>
   <td>
    myClassNameProperty, This is direct from Item
    </td>

यह नीचे दिए गए कोड से उत्पन्न HTML है

<td>
@Html.DisplayFor(modelItem=>item.Genre.Name)            
</td>

<td>
@item.Genre.Name, This is direct from Item
</td>

उसी समय अब ​​अगर मैं इस मामले में अपनी कक्षा "शैली" के लिए एक बयान में सभी संपत्तियाँ प्रदर्शित करना चाहता हूँ, तो मैं अपने टाइपिंग को बचाने के लिए @ Html.DisplayFor () का उपयोग कर सकता हूँ, कम से कम

मैं नीचे के रूप में शैली की प्रत्येक संपत्ति के लिए एक अलग बयान लिखने के स्थान पर @ Html.DisplayFor (modelItem => item.Genre) लिख सकता हूं

@item.Genre.Name
@item.Genre.Id
@item.Genre.Description

और इसलिए गुणों की संख्या के आधार पर।

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