2011-04-20 8 views
47

में मैं एक नियंत्रक एक दृश्य बुला है। दृश्य में PartialView@Html.Partial("ViewName", model). कहा जाता है यह ठीक काम करता है।एक आंशिक दृश्य में ViewBag तक नहीं पहुंच पा ASP.NET MVC3

लेकिन controller में मैं व्यूबैग में कुछ डालना चाहता हूं, दृश्य दृश्य में मुझे क्या करना मुश्किल होगा। मुख्य दृश्य में ViewBag तक पहुंचने में कोई समस्या नहीं है, लेकिन PartialView में यह कुछ भी वापस नहीं करता है।

यह संभव इस मामले में ViewBag उपयोग करने के लिए या मैं मॉडल मैं दृश्य को पारित में इस डेटा (और मॉडल मैं PartialView के पास है, और मॉडल मैं PartialView में नेस्ट के पास "हैक" चाहिए पहला PartialView)?

+0

गतिशीलता के बारे में याद रखने की एक बात यह है कि यह मामला संवेदनशील है – Buildstarted

+5

यह बहुत मूर्खतापूर्ण है कि मैंने वास्तव में इस बहुत खराब प्रश्न के लिए सोने का बैज अर्जित किया। मैं शर्मिंदा हूँ। – SoonDead

+0

मेरी गलती, मैंने इसे याद किए बिना श्रृंखला में @ Html.Action का उपयोग किया। – SoonDead

उत्तर

35

कि बिना किसी समस्या के काम करना चाहिए। मेरी HomeController सूचकांक कार्रवाई में मैं ViewBag के लिए एक संदेश जोड़ें:

:

@Html.Partial("ViewName") 

और आंशिक दृश्य पर मैं संदेश प्रस्तुत करना:

ViewBag.Message = "Welcome to ASP.NET MVC!"; 

सूचकांक देखें पर मैं आंशिक दृश्य जोड़ने

@ViewBag.Message 

पूरी तरह से काम करता है। आपने और क्या क्या किया? एक टाइपिंग गलती हो सकती है?

+26

मुझे पता चला है कि यदि आप @ एचटीएमएल। पार्टियल ("व्यूनाम", मॉडल) का उपयोग करते हैं तो शेष व्यूबैग उपलब्ध नहीं होगा। –

+2

क्या आप निश्चित हैं? मेरे लिए यह केवल तभी होता है जब आप स्पष्ट दृश्य डेटा निर्दिष्ट करते हैं। इस तरह: @ एचटीएमएल। पार्टियल ("व्यूनाम", मॉडल, व्यूडाटा) अन्यथा व्यूबैग पूरी तरह से सुलभ है। –

+20

मुझे पता है कि यह थोड़ा पुराना है, लेकिन भविष्य के संदर्भ के लिए, मैंने इसे 'ViewContext.Controller.ViewBag.Property' का उपयोग करके हल किया है। बेशक इसका मतलब है कि 'व्यूबैग' प्रॉपर्टी जिसे आप एक्सेस करने का प्रयास कर रहे हैं उसे नियंत्रक में सेट किया गया था, लेकिन मुझे लगता है कि यह एक सामान्य मामला है। – TehOne

28

आप Html.Partial() जहां viewData इनपुट पैरामीटर में से एक है की एक अधिभार, उदाहरण के लिए उपयोग कर रहे हैं:

@Html.Partial("PartialViewName", Model, new ViewDataDictionary(ViewBag)) 

फिर अपने आंशिक दृश्य अपने मूल ViewBag का डेटा देख नहीं होंगे।

निकालें new ViewDataDictionary(ViewBag) है, तो आप

@Html.Partial("PartialViewName", Model) 
+1

कृपया ध्यान दें, कि मुझे पहले से ही त्रुटि का कारण मिला है, इसलिए इस उत्तर के लिए कोई प्रासंगिकता हो सकती है। – SoonDead

+9

@SoonDead लेकिन यह उत्तर अभी भी googlers के लिए प्रासंगिक है :) –

+0

@EvgenyLevin यह सच है। – SoonDead

8

लिखना चाहिए एक टिप्पणी TehOne में कहा:

मैं जानता हूँ कि यह एक सा पुराना है, लेकिन भविष्य में संदर्भ के लिए, मैं ViewContext का उपयोग कर द्वारा इस हल .Controller.ViewBag.Property। बेशक इसका मतलब है कि आप जिस व्यूबैग प्रॉपर्टी को एक्सेस करने का प्रयास कर रहे हैं उसे नियंत्रक में सेट किया गया था, लेकिन मुझे लगता है कि यह एक सामान्य मामला है।

कौन सा है क्या मेरे लिए काम किया।

7

हाल ही में मुझे एक ही समस्या का सामना करना पड़ रहा था, लेकिन यहां जवाब केवल कामकाज थे क्योंकि वे का उपयोग करके Html.Partial के अधिभार का उपयोग न करने का प्रस्ताव करते हैं। लेकिन मेरा मानना ​​है कि अगर आप इन भार के उपयोग करने के लिए किया था सही जवाब है:

@Html.Partial(
    "PartialViewName", 
    model_object, 
    new ViewDataDictionary() { { "Value1InViewBag", ViewBag.Value1InViewBag }, { "Value2InViewBag", ViewBag.Value2InViewBag } } 
) 

मुझे लगता है कि इस उत्तर इस्तेमाल किया जाना चाहिए यदि आप अलग अलग उत्तीर्ण करने की आवश्यकता ViewDataDictionary और क्योंकि ध्यान में रखते हुए (जैसे मैं HtmlFieldPrefix को बदलने के लिए हमें यह) आपको पता होना चाहिए, ViewBag में क्या आंशिक दृश्य Wil जरूरत है, इसलिए यह समस्या ViewBag से सभी मापदंडों नाम के लिए नहीं होना चाहिए नई ViewBag आंशिक दृश्य में इस्तेमाल में कॉपी करने के लिए (जाहिरा तौर पर ViewBagViewData से मूल्यों का उपयोग करता)।

0

मेरे senario था, मैं मॉडल IEnumerable<SampleModel> साथ आंशिक दृश्य था हालांकि मैं के बाद से PartialView भी अब हर दृश्य का हिस्सा है, का उपयोग कर Model.SampleModelList coz null

@Html.Partial("PartialViewName", Model.SampleModelList, new ViewDataDictionary()) 

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

<div class="showcase-heading" id="dvValue" data-id="@Model.ContentId">@Model.Name</div> 
0

मैं एक बहुत ही बुनियादी पेज के साथ इस एक ही समस्या हो रही थी:

@Html.Partial("_AppIntro") 

<div class="form-group row"> 
    <div class="col-md-10"> 
     <a href="/Ag/Application/1" class="btn btn-default btn-primary">Next</a> 
    </div> 
</div> 

और आंशिक दृश्य नियंत्रक से पारित कर दिया कुछ गतिशील मूल्यों लाने के लिए ViewBag को कुछ संदर्भों के साथ केवल पाठ होता है। यह पता चला कि आंशिक दृश्य का नाम mattered। आंशिक पृष्ठ को हटाने और इसे जोड़ने के साथ -> देखें -> एमवीसी 5 देखें लेकिन पृष्ठ _AppIntro.cshtml को नामित करने से इसे ठीक किया गया है।