2009-03-11 16 views
5

मैं एएसपी.नेट एमवीसी फ्रेमवर्क की नवीनतम रिलीज में मास्टरपेज व्यू पर नेविगेशन बार में श्रेणियों की एक सूची लाने की कोशिश करने में थोड़ा उलझन में हूं। मैं partials साथ 0 अनुभव है अब तक (इस भ्रम को कहते हैं)।एएसपी.नेट एमवीसी - मास्टरपेज व्यू और रेंडरपार्टियल - भ्रम

मैं RenderPartial का इस प्रकार उपयोग करना चाहिए?

HtmlHelper.RenderPartial(string partialViewName, object model) 

मैं इस विधि के किसी भी अच्छे उदाहरण नहीं ढूंढ पाया। सम्मेलन से MasterPageView के साथ कोई मॉडल सही नहीं है? तो MasterPageView से डेटा को "आंशिक" में धक्का या खींचने का उचित तरीका क्या है?

यह मानते हुए कि इस विधि बिल्कुल गलत पथ नीचे जा रहा है:

<div id="navigation"> 
     <% 
      CategoryRepository cr = new CategoryRepository(); 
      IList<Category> lst = cr.GetCategories(); 
      Html.RenderPartial("NavBar", lst); 
     %> 
    </div> 

उत्तर

0

मैं Html.RenderAction (प्रयोग करेंगे) के बजाय और इसे से एक आंशिक दृश्य वापस जाएँ।

+0

कहाँ RenderAction() से विधि मिलता है? क्या यह एक Contrib बात है? – BuddyJoe

+0

यह कोडप्लेक्स पर एमवीसी फ्यूचर्स में हो सकता है। मुझे हाथ से याद नहीं है (जहां मैं अभी जांच कर सकता हूं) –

1
public ActionResult NavBar() 
{ 

      CategoryRepository cr = new CategoryRepository(); 
      IList<Category> lst = cr.GetCategories(); 


      return View(lst); 
} 
अपने आंशिक कॉल

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> 
<%@ Import Namespace="app.Models" %> 

पर

और अपने सभी प्रतिपादन यहाँ ui

<div id="navigation"> 
     <% 
      Html.RenderPartial("NavBar"); 
     %> 
    </div> 

आप ActionResult अपने नियंत्रकों में कॉल कर सकते हैं कर

+0

मेरे नियंत्रकों में से प्रत्येक पर मुझे यह नवबार() कॉल करना है? या इसे वारिस करें ... जो सही नहीं लगता है। – BuddyJoe

+0

मैं जो करता हूं वह बेसकंट्रोलर बनाता है जो नियंत्रक को विरासत में लेता है और मेरे सभी पुन: प्रयोज्य आंशिक कोड कॉल को बेस नियंत्रक में रखता है और मेरे सभी नियंत्रक बेसकंट्रोलर का उत्तराधिकारी होते हैं। इस तरह सभी नियंत्रकों के पास उस आंशिक तक पहुंच होती है। – Ayo

+0

नहीं, आपको नहीं करना है। बस अपना नेविगेशन कोड @ मास्टर पेज फ़ाइल – Funky81

1

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

ViewData["MasterPageData"] = FunctionToGetData(); 

और फिर:

<% 
    if (ViewData["MasterPageData"] != null) 
    { 
     Html.RenderPartial("ControlName.ascx", ViewData); 
    } 
%> 
तब नियंत्रण में

, प्रक्रिया की तरह आप एक सामान्य दृश्य पृष्ठ पर प्रदर्शित होंगे तो आप शायद कुछ इस अपने नियंत्रक में करना होगा:

<% var categories = (CastIfNeeded)ViewData["MasterPageData"]; %> 

process as normal... 

मुझे अभी तक एक मास्टर पेज पर डेटा पास नहीं करना पड़ा है, लेकिन इस तरह मुझे लगता है कि आप ऐसा करेंगे। अधिक जानकारी here.

संपादित करें: मैं अपने वर्तमान प्रोजेक्ट में क्या कर रही हूं प्रतिबिंबित करने के लिए एक छोटे से चारों ओर बदल दिया है।

+0

+1 अच्छी जानकारी दें। मैं आपको इसे अपने उदाहरण में पूछूंगा ... आपका गुजरने वाला डेटा [ऑब्जेक्ट] मॉडल के रूप में। आप इसे आंशिक पक्ष से कैसे संदर्भित करते हैं? ट्यूटोरियल ViewData विधि दिखाता है। – BuddyJoe

+0

आपके प्रश्न का उत्तर (उम्मीदपूर्वक) में संपादित किया गया। –

7

आप अपने masterpage ViewData के लिए नहीं करना चाहते? आप एक आधार दृश्य डेटा वर्ग कि सभी अपने अन्य ViewData वर्गों से विरासत होने से इसे हल कर सकता है ...

BaseViewData.cs - यह एक ViewData वर्ग कि अन्य सभी ViewData वर्गों से

public class BaseViewData 
{ 
    public string Title { get; set; } 
    public string MetaKeywords { get; set; } 
    public string MetaDescription { get; set; } 
    IList<Category> NavCategoryList { get; set; } 
} 

वारिस जाएगा अब आपकी साइट में। मस्टर पेज में

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage<BaseViewData>" %> 

<title><%=ViewData.Model.Title %></title> 
<meta name="keywords" content="<%=ViewData.Model.MetaKeywords %>" /> 
<meta name="description" content="<%=ViewData.Model.MetaDescription %>" /> 

<%= Html.RenderPartial("NavBar", ViewData.Model.NavCategoryList) %> 

इससे आपके एप्लिकेशन आर्किटेक्चर पर काफी प्रभाव पड़ सकता है, लेकिन यह एक बुरी चीज नहीं है।

HTHs, चार्ल्स

+0

हाँ मैं इस विधि का पालन करता हूं। –

+0

+1 हम्म। यह काम कर सकता है ... और कम से कम अब मुझे "ViewData.Model" पता है। वाक्य - विन्यास। यकीन नहीं है कि मैंने अभी तक क्यों नहीं देखा था। – BuddyJoe

+0

किग परियोजना इस तरह से करती है, मैं इसे लागू करने वाला हूं। आप मॉडल को कहां और कैसे लोड करते हैं ताकि मास्टर पेज यह कर सके: ViewData.Model.Titl – Picflight

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