2011-11-01 16 views
61

क्या नियंत्रक मेरे नियंत्रक बी से आंशिक दृश्य के मेरे दृश्य के अंदर प्रस्तुत करने का कोई तरीका है?अन्य नियंत्रक से आंशिक दृश्य प्रस्तुत करें

संपादित करें: मैंने एक आंशिक दृश्य लिखा है जो केवल दो नियंत्रकों के लिए अच्छा है और मैं इसे अपने दोनों दृश्य फ़ोल्डर में कॉपी नहीं करना चाहता हूं।
मैं चाहता हूं कि आंशिक दृश्य प्रत्येक बार प्रदर्शित होने के बाद दृश्य प्रस्तुत नहीं किया जाए।

+1

यह कई अनेक अर्थ हो सकते लिखने की ज़रूरत लौटना चाहते कहना देता है। क्या आप सिर्फ दृश्य का पुन: उपयोग करना चाहते हैं (नियंत्रक ए द्वारा उत्पन्न मॉडल)? क्या आप नियंत्रक कार्रवाई का आह्वान करना चाहते हैं जो दृश्य उत्पन्न करता है? क्या आप पृष्ठ को प्रस्तुत किए जाने के बाद गतिशील रूप से दृश्य लोड करने के लिए AJAX का उपयोग करना चाहते हैं? – tvanfosson

+0

क्या आप अधिक विशिष्ट हो सकते हैं। आप वास्तव में क्या हासिल करना चाहते हैं? –

+1

@ एचटीएमएल.एक्शन ("आपकापार्टियल व्यूएक्शन", "कंट्रोलरनाम", नया {आईडी = मॉडल.आईडी}) –

उत्तर

75
  1. आप उन्हें दृश्य/साझा फ़ोल्डर में डाल कर नियंत्रकों के बीच विचारों को साझा कर सकते हैं:

    वैकल्पिक रूप से आप/विचारों में आंशिक दृश्य तो साझा बस लौट डाल सकते हैं। प्रत्येक नियंत्रक तब उस दृश्य को नाम से प्रस्तुत कर सकता है।

  2. आप Html.Partial() का उपयोग कर वर्तमान दृश्य में आंशिक दृश्य (जिसे नियंत्रकों के बीच (1) में साझा किया जा सकता है) प्रस्तुत कर सकते हैं।
  3. आप एक अलग नियंत्रक पर कार्रवाई करने के लिए Html.Action() का उपयोग कर सकते हैं और परिणामों को वर्तमान दृश्य में प्रस्तुत कर सकते हैं।
  4. पृष्ठ को प्रस्तुत करने के बाद आप एक अलग नियंत्रक से आंशिक दृश्य लोड करने के लिए AJAX का उपयोग कर सकते हैं।
+0

विकल्प के बारे में 3: क्या मैं अपने नियंत्रक को आमंत्रित कर सकता हूं और अन्य नियंत्रक से आंशिक दृश्य प्रस्तुत कर सकता हूं? सापेक्ष पथ का उपयोग किए बिना धन्यवाद! – gdoron

+0

@gdoron आप कोड को स्थानीयकृत कर सकते हैं जो आंशिक दृश्य को एक या दूसरे नियंत्रक में उत्पन्न करता है और इसमें दोनों नियंत्रकों के विचारों के लिए 'Html.Action() 'के माध्यम से शामिल है। – tvanfosson

+5

5. आप @ Html.Partial ("~/Views/Partials/location.cshtml", मॉडल) –

17

हाँ,

return PartialView("/path/view.cshtml"); 

तुम बस पथ हिस्सा बाहर काम करने की जरूरत है।

return PartialView("view.cshtml"); 
+1

मैं नहीं चाहता कि आंशिक दृश्य साझा किया जाए। और सापेक्ष पथ एमवीसी रूटिंग सिस्टम के लिए काफी उपयुक्त नहीं है। अन्य सुझाव? – gdoron

+0

यहां बस एक छोटा सा संदेह है। क्या पार्टियल व्यू विधि एचटीएमएल एनकोडेड स्ट्रिंग या कच्चे एचटीएमएल देता है? – Karan

1
@model YourModelNamesapce.ModelName 
@{ 
    ViewBag.Title = "Edit"; 
    Layout = "~/Views/Shared/_LayoutForPartialViews.cshtml"; 
} 
<table> 
    <tr> 
     <td> 
      @Html.LabelFor(model => model.fieldname) 
     </td> 
     <td> 
      @Html.DisplayFor(model => model.fieldname) 
     </td> 
    </tr> 
    <tr> 
     <td>@Html.Action("PartialViewAction", "Controller", new { id = Model.id })</td> 
    </tr> 
</table> 
+0

क्षमा करें, लेकिन यह मेरे प्रश्न का उत्तर कैसे दे रहा है ?! – gdoron

+0

गॉर्डन, मैंने अपना जवाब –

+1

अपडेट किया है यह एक बहुत स्पष्ट जवाब नहीं है, हालांकि हरि यह इंगित कर रहा है कि DisplayFor एक अच्छा विकल्प है। – mcfea

44
@Html.Partial("~/Views/ControllerB/Index.cshtml") 
+3

सरल समाधान। : डी – wooncherk

+0

क्या सीधे देखने के बजाय नियंत्रक पर कार्रवाई करना संभव है? – FrenkyB

1

बस एक पक्ष नोट के रूप में मैंने पाया इस सूत्र एक ही सवाल के लिए खोज लेकिन जवाब से काम नहीं कर रहे थे: ऑर्चर्ड सीएमएस मॉड्यूल में आप neat solution Pittfall द्वारा पोस्ट की गई उपयोग नहीं कर सकते, तो आप संबंधित पथ का उपयोग करना आंशिक विचार वापस करने के लिए। आप एक नियंत्रक

Controllers/SiteController.cs 

है और आप आंशिक दृश्य

Shared/MessageList/Items 

तो अपनी कार्रवाई के तरीकों में आप

return PartialView("../Shared/MessageList/Items"); 
संबंधित मुद्दे