2010-11-10 21 views
5

आज जारी किए गए एएसपी.नेट एमवीसी 3 आरसी में रेजर के साथ बस मिल रहा है।एएसपी.नेट एमवीसी 3 आरसी - रेजर "देखें" संपत्ति

अब, हमारे पास "लेआउट पेज" की अवधारणा है, जिसे मैं एएसपीएक्स व्यू इंजन में "व्यू मास्टर" का प्रतिस्थापन मानता हूं।

लेकिन मुझे लेआउट पेज की "व्यू" संपत्ति को समझ में नहीं आता है।

_Layout.cshtml

<html> 
<head> 
    <title>@View.Title</title> 

... MyView.cshtml

:

यहाँ उदाहरण जो जब आप एक नया उस्तरा दृश्य बनाने के लिए बनाया जाता है

@model Mvc3FunParty.Models.Post 

@{ 
    View.Title = "Some Title"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

प्रस्तुत किए गए HTML के <title> टैग में "कुछ शीर्षक" डाले जाने वाले परिणाम।

पृथ्वी पर यह कैसे काम करता है? जब मैं "व्यू" संपत्ति पर होवर करता हूं, तो यह "गतिशील" प्रकार का है।

तो इस संपत्ति का वास्तव में क्या उपयोग किया जाना चाहिए? क्या हम वहां कुछ भी सामान ले सकते हैं? क्या यह व्यूडेटा का रेजर कार्यान्वयन माना जाता है?

और यदि ऐसा है, तो यह "ViewDataDictionary" प्रकार का नहीं होना चाहिए? क्यों "गतिशील" दृश्य संपत्ति के लिए टाइप करें?

+0

और साथ ही, एक तरफ नोट - क्या किसी को इंटेलिजेंस के साथ समस्याएं हैं? मैं Resharper का उपयोग कर, लेकिन वीएस -2010 (कथन पूरा करने) में सेटिंग की जांच की। जब मैं 'मॉडल' करता हूं तो मुझे इंटेलिजेंस मिलता है लेकिन आईएम टाइपिंग के रूप में नहीं। – RPM1984

+0

जब तक आप अपने मॉडल के प्रकार को परिभाषित नहीं करते हैं ('@model MyModel' के माध्यम से) मॉडल प्रॉपर्टी को गतिशील (कम से कम सी #) – marcind

+0

के रूप में टाइप किया जाएगा, इसके अलावा, रेजर टूलिंग हमेशा रिशेर्पर के साथ काम नहीं करती है। – marcind

उत्तर

1

हाँ, "देखें" वास्तव में ViewData है और वे के रूप में वाक्य रचना आप देख रहे हैं (View.Title)

यह

ViewData["Title"] 

की तरह थोड़ा डली के बहुत सारे करने के लिए अनुवाद करने के लिए इतना dynamic उपयोग कर रहे हैं यह एमवीसी में और खासकर एमवीसी 3 में जो आपको भ्रमित करेगा :)।

+0

ठीक है, लेकिन हमने मार्कअप में डेटा ** ** बनाने के लिए 'व्यूडाटा ["शीर्षक"] '** का उपयोग कभी नहीं किया, हमने इसे नियंत्रक में परिणाम देने से पहले इसका उपयोग किया, और दृश्य में मूल्य प्रदर्शित किया। यही कारण है कि मैं उलझन में हूं, क्योंकि यह वास्तव में दृश्य में डेटा बना रहा है (या ऐसा लगता है) – RPM1984

+0

एएसपी.नेट वेब पेजों (रेजर का स्टैंडअलोन संस्करण, जैसे वेबमैट्रिक्स का उपयोग करता है) में कोई नियंत्रक नहीं है, इसलिए मानों को इनलाइन –

+0

इनलाइन सेट करना होगा औरभी, मैंने नियंत्रक कार्रवाई के लिए 'ViewModel.Title = "Foo" 'जोड़ा, और दृश्य पृष्ठ से इसे छोड़ दिया, और यह मान" Foo "लिया। यदि मैं कोड int को छोड़ देता हूं तो वह पृष्ठ देखता है, यह नियंत्रक द्वारा मान सेट को ओवरराइड करता है। दिलचस्प ... – RPM1984

4

View संपत्ति ViewData संपत्ति के लिए एक उपनाम है। इसका मतलब है कि निम्नलिखित कोड

View.Title 

ViewData["Title"] 

यह सी # नेट 4. मूल रूप में शुरू की गई भाषा के नए 'गतिशील' सुविधा यह आप देर से लिखने की अनुमति देता का उपयोग करके काम करता है के बराबर है -बाउंड कोड जो अब तक एक स्थिर रूप से टाइप की गई भाषा है। यदि आप और जानना चाहते हैं तो वेब पर बहुत से संसाधन हैं।

ViewData संपत्ति अभी भी उपलब्ध है और आप दोनों इंटरचेंजबली का उपयोग कर सकते हैं। वे दोनों एक ही बैकिंग स्टोरेज का उपयोग करते हैं, इसलिए एक तरह से किए गए बदलाव दूसरे तरीके से उपलब्ध होंगे।

View का उपयोग करने का लाभ अधिक संक्षिप्त वाक्यविन्यास है। नुकसान यह है कि आपको IntelliSense समर्थन नहीं मिलता है।

कारण आप अपने दृश्य पृष्ठ में View.Title सेट कर सकते हैं और लेआउट पृष्ठ में दिखाया गया सही मान रेजर पृष्ठों के प्रतिपादन क्रम के कारण है। हम इसे अंदरूनी प्रतिपादन कहते हैं, जिसका अर्थ है कि आपका व्यू पेज पहले निष्पादित हो जाता है, यह HTML आउटपुट को बफर में एकत्रित किया जाता है, फिर लेआउट पेज निष्पादित हो जाता है, और बफर किए गए व्यू पेज आउटपुट को इंजेक्शन दिया जाता है जहां आप RenderBody पर कॉल करते हैं।

+0

यह समझ में आता है। मुझे लगता है कि मैं TempData और ViewData के साथ भ्रमित हो रहा हूं। मॉडल भी - मेरी समझ यह है कि ViewData.Model आपको रिटर्न व्यू (मॉडल) करने के बजाए दृश्य में प्रस्तुत मॉडल को गतिशील रूप से सेट करने की अनुमति देता है। क्या वो सही है? आपके प्रतिक्रिया के लिए धन्येवाद। :) – RPM1984

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