2013-03-23 6 views
7

तो मैं एक समाप्त विधि है कि काम करता है और मैं वेबसाइट पर यह सब का उपयोग करें:ASP.NET MVC JSON के साथ वापस जाने के लिए एक स्ट्रिंग को आंशिक दृश्य प्रस्तुत करना

public PartialViewResult GetBlogEntries(int itemsToTake = 5) 
{ 
    ... 
    return PartialView("_BlogPost", model); 
} 

अब मैं अपने जावास्क्रिप्ट से प्राप्त करना चाहते हैं JSON रूप में।

public JsonResult GetBlogPostJson() 
{  
    var blogEntry = GetBlogEntries(1); 
    var lastEntryId = GetLastBlogEntryId(); 
    return Json(new {Html = blogEntry, LastEntryId = lastEntryId}, JsonRequestBehavior.AllowGet); 
} 

आइडिया इस तरह इसे पाने के लिए है:

$.ajax({ 
      url: '/Blog/GetBlogPostJson', 
      dataType: 'json', 
      success: function (data) { 
       var lastEntryId = data.LastEntryId; 
       var html = data.Html; 
       ... 
      } 
     }); 

समस्या है कि निश्चित रूप से यह एक स्ट्रिंग है, लेकिन एक PartialViewResult उत्पादन नहीं करते।

प्रश्न यह है कि मैं Outlook में PartialViewResult को कैसे हल कर सकता हूं जिसे मैं JSON के साथ वापस भेज सकता हूं?

+0

कृपया मुझे सही करें अगर मैं गलत हूं, तो आप HTML उत्पन्न करना चाहते हैं, फिर इस HTML से एक आईडी प्राप्त करें, और अंत में JSON में आईडी और HTML दोनों भेजें? – Dima

+0

हां और नहीं। विधि GetBlogEntries() एक आंशिक दृश्य बनाता है जिसे मैं वेबपृष्ठ पर विभिन्न स्थानों से कॉल करता हूं। हालांकि यह कहीं भी आईडी प्रिंट नहीं करता है। इसलिए मुझे इसे अलग से प्राप्त करने की आवश्यकता है। फिर कॉलर को एचटीएमएल और आईडी भेजें। क्लाइंट पर जावास्क्रिप्ट केवल नए ब्लॉग प्रविष्टियों को प्राप्त करने के लिए सुनिश्चित करेगा यदि कोई नया नया प्राप्त हो। – Patrick

+0

@ निकलर्सन, कृपया प्रश्न पर फिर से देखें और उत्तर दें जिसे आपने डुप्लिकेट के रूप में चिह्नित किया है। यह प्रश्न जेएसओएन (अंत बिंदु से) के रूप में वापस लौटने का एक तरीका मांगता है, जबकि अन्य रेजर प्रतिपादन के लिए पूछता है। इसी तरह, हाँ। लेकिन निश्चित रूप से एक ही उपयोग के मामले नहीं है। –

उत्तर

16

मैं लगभग 6 महीने पहले इस माध्यम से गया था। लक्ष्य एक jquery पॉपअप संवाद पॉप्युलेट करने के लिए आंशिक का उपयोग करना था।

समस्या देखें इंजन उन्हें अपने आप अजीब क्रम में प्रस्तुत करना चाहता है ...

इस प्रयास करें। एलएमके अगर इसे स्पष्टीकरण की जरूरत है।

public static string RenderPartialViewToString(Controller thisController, string viewName, object model) 
    { 
     // assign the model of the controller from which this method was called to the instance of the passed controller (a new instance, by the way) 
     thisController.ViewData.Model = model; 

     // initialize a string builder 
     using (StringWriter sw = new StringWriter()) 
     { 
      // find and load the view or partial view, pass it through the controller factory 
      ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(thisController.ControllerContext, viewName); 
      ViewContext viewContext = new ViewContext(thisController.ControllerContext, viewResult.View, thisController.ViewData, thisController.TempData, sw); 

      // render it 
      viewResult.View.Render(viewContext, sw); 

      //return the razorized view/partial-view as a string 
      return sw.ToString(); 
     } 
    } 
+0

एक आकर्षण की तरह काम किया। धन्यवाद =) – Patrick

+0

मैं कैसे पास करूं (नियंत्रक इस नियंत्रक), क्या आप मुझे दिखा सकते हैं कि मैं आपकी विधि का उपयोग कैसे करूं? –

+0

यह काम करता है लेकिन यह इकाई परीक्षण योग्य नहीं है। :( –

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