2010-03-03 14 views
22

मैं एक मॉडल इस के समान है:एक कार्य के परिणाम में एक PartialView के रूप में एक EditorTemplate रिटर्निंग ASP.Net MVC 2

<div id="section1"> 
    <%=Html.EditorFor(m => m.ObjectA)%> 
</div> 
<div id="section2"> 
    <%=Html.EditorFor(m => m.ObjectB)%> 
</div> 
:

public class myModel 
{ 
    public ClassA ObjectA {get; set;} 
    public ClassB ObjectB {get; set;} 
} 

मेरा मुख्य ध्यान में रखते हुए, मैं इस के समान टैग नहीं है

क्लासए और कक्षाबी दोनों में संपादक टेम्पलेट्स परिभाषित हैं।

मैंने कुछ जावास्क्रिप्ट बनाया है जो सेक्शन 1 div को पुनः लोड करने के लिए AJAX कॉल बनाता है। मैं एक्शन ए, क्लासए.एक्सएक्स के लिए संपादक को वापस करने के लिए एक्शन विधि चाहता हूं जो कि संपादक टेम्पलेट फ़ोल्डर में है।

public ActionResult GetData(int input) 
{ 
    // Process input here and create modelData 

    return PartialView("ClassA", modelData); 
} 

यह एक त्रुटि देता है क्योंकि यह ClassA दृश्य नहीं मिल सकता है:

मैं अपने कार्य पद्धति में निम्नलिखित है।

मेरा समाधान "GetData" नामक दृश्य फ़ोल्डर में पार्टियल व्यू बनाने के लिए किया गया है और मेरी वापसी GetData व्यू प्रस्तुत करती है। GetData दृश्य कोड का केवल एक ही लाइन है:

<%=Html.RenderForModel()%> 

यह कार्य करता है, लेकिन अगर वहाँ एक कार्रवाई वापस जाने के लिए और विधि संपादक टेम्पलेट के लिए एक तरीका था मैं सोच रहा था?

आपके द्वारा प्रदान किए जा सकने वाले किसी भी सुझाव के लिए धन्यवाद।

उत्तर

23
return PartialView("~/EditorTemplates/ClassA.ascx", modelData); 
+0

कि काम नहीं करता है के लिए काम किया। यह अभी भी टेम्पलेट नहीं मिल रहा है। हालांकि, ऐसा लगता है कि यह केवल "~/editorTemplates/ClassA.ascx" स्थान की खोज करता है, जिसे मैं उम्मीद नहीं कर रहा था। –

+4

हालांकि, आवेदन रूट से पूरा पथ देना काम करता है। उदाहरण के लिए, "~/Views/MyView/EditorTemplates/ClassA.ascx"। मुझे नहीं पता था कि आप ऐसा कर सकते हैं। –

+0

क्या दृश्य टेम्पलेट को प्रस्तुत करने का कोई तरीका है? कहें कि 'modelData' प्रकार' क्लासए 'है या नहीं? – Shimmy

27

उपहार रैपिंग के लिए बोनस अंक:

public class CustomControllerBase : Controller 
{ 
    public PartialViewResult EditorFor<TModel>(TModel model) 
    { 
     return PartialView("EditorTemplates/" + typeof(TModel).Name, model); 
    } 

    public PartialViewResult DisplayFor<TModel>(TModel model) 
    { 
     return PartialView("DisplayTemplates/" + typeof(TModel).Name, model); 
    } 
} 

नियंत्रक (कहा जाता है, कहते हैं, MyController) CustomControllerBase से विरासत, और उसके बाद है:

public ActionResult MyAction(int id) 
{ 
    return EditorFor(new MyViewModel(id)); 
} 

कोड की तलाश की जाएगी "~/दृश्य/MyController/EditorTemplates/MyViewModel.ascx"।

+1

नव निर्मित ऑब्जेक्ट को पैरेंट मॉडल की संग्रह संपत्ति में संलग्न करने का कोई तरीका? – Shimmy

1
इस

मुझे (MVC 4)

public ActionResult GetData(int input) 
{ 
    // Process input here and create modelData 

    return PartialView("EditorTemplates/ClassA", modelData); 
} 
संबंधित मुद्दे