2011-06-15 11 views
200

मैं समझता हूँ कि उस्तरा में, @Html की तरह आदि लिंक, आदानों के लिए HTML,@ Html.DisplayFor वाक्यविन्यास क्या है?

उत्पन्न लेकिन मैं DisplayFor समारोह नहीं मिलता है साफ चीजों की एक गुच्छा है, ...

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

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

जब मैं सिर्फ लिख सकते हैं:

@Model.Title 

उत्तर

192

Html.DisplayFor() DisplayTemplate कि जनसंपर्क से मेल खाता है प्रदान करेगा ऑपरेटी का प्रकार

यदि यह कोई नहीं मिल रहा है, तो मुझे लगता है कि यह .ToString() को आमंत्रित करता है।


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


उदाहरण:

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

@model string 

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

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

+5

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

+5

@ enorl76 आप कर सकते हैं। [डेवो का जवाब] देखें (http://stackoverflow.com/a/6365687/212384)। –

+3

उदाहरण के लिए फ़ॉर्म में दिनांक पिकर हमेशा दिखाने के लिए आप डेटटाइम डेटाटाइप के लिए संपादक के लिए टेम्पलेट के लिए एक jQuery दिनांक पिकर जोड़ सकते हैं। –

28

DisplayFor टेम्पलेटिंग के लिए भी उपयोगी है। आप अपने मॉडल के लिए एक टेम्पलेट लिखते हैं, और कुछ इस तरह कर सकता है: @Html.EditorFor(m => m) को

@Html.DisplayFor(m => m) 

इसी प्रकार के। यह डीआरवाई प्रिंसिपल के लिए उपयोगी है ताकि आपको उसी मॉडल के लिए एक ही डिस्प्ले तर्क लिखना पड़े।

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

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


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

+6

'@ एचटीएमएल। डिस्प्लेफ़ोर (एम => एम) 'को' @ एचटीएमएल.डिस्प्लेफोर मॉडेल() 'के लिए भी सरल बनाया जा सकता है। –

+0

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

+1

पहला मीटर पैरामीटर – Sinaesthetic

70

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

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

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

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

उदाहरण के बजाय इसे एक कड़ी के रूप में दिखाई सकता है एक ईमेल पता एक सादे स्ट्रिंग जा रहा है के लिए:

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

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

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

यह अब कोड

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

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

नीचे से उत्पन्न एचटीएमएल एक ही समय में है अगर मैं अपने वर्ग "शैली" इस मामले में, मैं @Html उपयोग कर सकते हैं के लिए एक बयान में सभी गुण प्रदर्शित करना चाहते हैं। मेरे टाइपिंग पर सहेजने के लिए DisplayFor(), कम से कम

मैं

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

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

संबंधित मुद्दे