2009-11-09 17 views
6

मैं एएसपी.नेट एमवीसी 1.0 के लिए नौसिखिया हूं। मैं VS2008 .NET3.5 के साथ निर्मित क्लासिक एप्लिकेशन से बदल रहा हूं। मैंने एक मास्टर पेज बनाया है, और मेनू डेटाबेस से पढ़ा जाना चाहिए। अब क्लाउड ASP.NET3.5 VS2008 में उपयुक्त मेनू div में HTML उत्पन्न करने वाला कोड मास्टर पेज के पीछे कोड में था।एएसपी.नेट एमवीसी - मास्टर पेजेस के पीछे कोड

अब मैं समझ नहीं पा रहा हूं कि मास्टर पेज का कोड बीएसई एएसपी.नेट एमवीसी 1.0 में है?

किसी के पास उदाहरण हैं?

धन्यवाद

उत्तर

3

आपका मास्टर पृष्ठ अब एक दृश्य है, और दृश्य निष्क्रिय किया जाना चाहिए। दूसरे शब्दों में, उन्हें चीजों को खुद नहीं देखना चाहिए।

मॉडल से आवश्यक डेटा खींचने के लिए यह एक और अधिक सही दृष्टिकोण (एएसपी.नेट एमवीसी के संदर्भ में) होगा।

संबंधित चर्चा के लिए this SO question पर एक नज़र डालें।

+0

क्या आपके पास कोई उदाहरण है? –

+0

मेरा उत्तर अपडेट किया गया ... –

+0

मुझे लगता है कि संदर्भित उदाहरण, व्यूमोडेल ऑब्जेक्ट्स के साथ प्रश्न के लिए थोड़ा सा ओवरकिल है। –

7

एमवीसी में अब कोड-पीछे कक्षाएं नहीं हैं। आप जो चाहते हैं वह आंशिक है।

तुम इतनी है कि यह प्रयोग करना होगा:

<% Html.RenderPartial("MainMenu.ascx", ViewData["Menu"]); %> 

इस मेनू अपने सभी पृष्ठों में होने की आप अपने नियंत्रकों एक कस्टम नियंत्रक वर्ग कि हमेशा मेनू डेटा पहले भरता उपवर्ग कर सकते हैं जा रहा है।

तो MVC वंशानुगत पदानुक्रम के साथ खिलवाड़ overkill है आप भी एक MenuController वर्ग बनाने के लिए और आपके विचार/मास्टर में RenderAction उपयोग कर सकते हैं:

<% Html.RenderAction<MenuController>(x => x.MainMenu()); %> 
3

ASP.NET site पर एक बड़ा ट्यूटोरियल दिखाता है कि कैसे करना है बिल्कुल यह

संक्षेप में, आप व्यूडेटा संग्रह के माध्यम से डेटा को मास्टर पेज पर पास करते हैं। डेटाडेटा में डेटा प्राप्त करने के लिए, एक अनुप्रयोग स्तर नियंत्रक बनाएँ। पृष्ठ नियंत्रक बेस एमवीसी नियंत्रक के बजाय एप्लिकेशन नियंत्रक से प्राप्त करते हैं।

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

+0

यह एक शानदार ट्यूटोरियल है, कंट्रोलर विस्तार विकल्प को अच्छी तरह से बताता है। –

6

यदि आप चाहें तो भी आपके पास कोड हो सकता है।

<%@ Master Language="C#" AutoEventWireup="true" 
Inherits="Site_Master" CodeFile="Site.Master.cs" %> 
फिर अपने .master.cs में

: अपने .master फ़ाइल डाल में

public partial class Site_Master : ViewMasterPage 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 
} 
+2

आप * कर सकते हैं * लेकिन कृपया नहीं। –

+3

ठीक है, उसने पूछा - मैंने जवाब दिया। इसके अलावा, एक कानूनी मामला हो सकता है, आप कभी नहीं जानते। –

+0

मुझे आपकी शैली पसंद है। :) –

1

व्यक्तिगत रूप से, मैं दृढ़ता से टाइप किया विचारों और ViewModels का उपयोग करना पसंद। यदि आपके मास्टर पेज को डेटा की आवश्यकता है, तो उसके लिए व्यूमोडेल बनाएं। सुनिश्चित करें कि प्रत्येक पृष्ठ के ViewModel इस आधार ViewModel से विरासत में मिलता है। इसी तरह, एक बेस नियंत्रक बनाएं जो हर दूसरे नियंत्रक से प्राप्त होता है। एक्शन फ़िल्टर का उपयोग करने से आप यह सुनिश्चित कर सकते हैं कि मास्टर व्यूमोडेल पूरी तरह से आबादी वाला है। उदाहरण के लिए this देखें।

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