2013-11-04 7 views
7

यदि मेरे पास कोई दृश्य और आंशिक दृश्य है, तो क्या कोई तरीका है कि मैं आंशिक दृश्य से माता-पिता को डेटा पास कर सकता हूं?आंशिक दृश्य से अपने माता-पिता को डेटा पास करना

तो अगर मैं View.cshtml है:

<div id="@someDataFromPartialSomehow"> 
    @Html.Partial("_PartialView") 
</div> 

और _PartialView.cshtml:

@{ someDataFromPartialSomehow = "some-data" } 

<div> 
    Some content 
</div> 

मैं कैसे कुछ इस तरह लागू करने के बारे जाना चाहते हैं?

मैंने ViewBag.SomeDataFromPartialSomehow का उपयोग करने की कोशिश की, लेकिन इसका परिणाम माता-पिता में null में हुआ।


का प्रयास

को परखने के लिए डेटा की समस्या को हल मिल बुलाया जा रहा है मैं इस कोशिश की पहले उत्पन्न किया जा रहा:

View.cshtml:

@{ var result = Html.Partial("_PartialView"); } 

<div id="@ViewData["Stuff"]"> 
    @result 
<div> 

_PartialView.cshtml:

@{ ViewData["Stuff"] = "foo"; } 

<div> 
    Content 
</div> 

लेकिन @ViewDate["Stuff"] पर कॉल दुर्भाग्यवश कुछ भी प्रस्तुत नहीं करता है।

+2

आप "से डेटा पास से क्या मतलब है अभिभावक को आंशिक दृश्य "बिल्कुल? – bump

+0

मैंने जो उदाहरण दिया है, वैसे ही विचार यह है कि रैपिंग div की आईडी आंशिक दृश्य से सेट की जा रही है। –

उत्तर

19

आप HttpContext का उपयोग करके विचारों के बीच राज्य साझा कर सकते हैं।

@{ 
    this.ViewContext.HttpContext.Items["Stuff"] = "some-data"; 
} 

और उसके बाद:

@{ var result = Html.Partial("_PartialView"); } 

<div id="@this.ViewContext.HttpContext.Items["Stuff"]"> 
    @result 
<div> 

सिवाय कि उदाहरण आप अपने प्रश्न में पता चला है: पहले

<div id="@someDataFromPartialSomehow"> 
    @Html.Partial("_PartialView") 
</div> 

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

यह भी ध्यान रखें कि आप जो हासिल करने की कोशिश कर रहे हैं वह खराब डिजाइन है। यदि आंशिक दृश्य केवल कुछ विशिष्ट माता-पिता के संदर्भ में ही काम कर सकता है, तो आपको विचारों को अलग करने पर पुनर्विचार करना पड़ सकता है। आंशिक विचार कुछ ऐसा है जो अनिवार्य और पुन: प्रयोज्य होना चाहिए, इससे कोई फर्क नहीं पड़ता कि यह किस संदर्भ में रखा जा रहा है। अगर यह होस्टिंग माता-पिता के बारे में चीजें मानता है तो यहां एक गंभीर डिजाइन समस्या है।

+0

मैं इसे और अधिक सोच रहा था क्योंकि मेटा-डेटा माता-पिता को पास किया जा रहा है जहां माता-पिता इसका उपयोग कर सकते हैं - पार्टियल व्यू शिकायत नहीं करेगा अगर उस डेटा का उपयोग नहीं किया जाता है, तो यह अभी भी आम तौर पर स्वतंत्र और पुन: प्रयोज्य है - केवल चीनी के साथ अगर माता-पिता * इसका उपयोग कर सकते हैं। स्पष्ट रूप से डेटा को इसकी आवश्यकता के बाद उत्पादित किया जा रहा है, लेकिन यह समस्या का हिस्सा है! –

+0

कृपया मेरे अपडेट को देखने के लिए देखें कि मैंने क्या प्रयास किया। –

+0

मेरा अद्यतन उत्तर देखें। आप डेटा साझा करने के लिए HttpContext का उपयोग कर सकते हैं। लेकिन एक बार फिर, कृपया ऐसा न करें, यह एक बहुत खराब डिजाइन है। अपने मूल लक्ष्य को प्राप्त करने के बेहतर तरीके हैं। –

3

मेरे पास आपके लिए एक सुझाव है।

आंशिक दृश्य में छुपा इनपुट फ़ील्ड रखें और उन्हें जावास्क्रिप्ट से प्राप्त करें।

पूर्व: _PartialView में।cshtml

<input type="hidden" id="someDataFromPartialSomehow" value="5" /> 

आपके विचार में

<script> 
$(document).ready(function(){ 
    var someDataFromPartialSomehow = $("#someDataFromPartialSomehow").val(); 
}); 
</script> 

नोट आप दस्तावेज़ तैयार समारोह के अंदर js समारोह लिखने के लिए क्योंकि आंशिक दृश्य पूरी तरह से लोड किया जाना चाहिए है।

View.cshtml:

@{ 
    dynamic properties = new NullingExpandoObject(); 

    var result = Html.Partial("_PartialView", (NullingExpandoObject)properties); 
} 

<div id="@properties.Id"> 
    @result 
<div> 

_PartialView.cshtml:

+0

धन्यवाद, यह एक अच्छा आसपास है। आदर्श रूप में मैं एक शुद्ध-asp.net उत्तर की तलाश करूँगा लेकिन +1 वही! –

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