2011-03-17 12 views
8

मेरे पास एक ऐसा दृश्य है जो टिप्पणियों की एक सूची प्रदर्शित करता है। यह DisplayTemplate के माध्यम से करता है। मुझे बस इतना करना है जैसे @Html.DisplayFor(x => x.BlogPost.PostComments) और सभी टिप्पणियां उचित रूप से प्रस्तुत करती हैं।एमवीसी 3 - आप एक कार्य विधि से एक प्रदर्शन टेम्पलेट कैसे वापस करते हैं?

एक नई टिप्पणी जोड़ने के लिए पृष्ठ के नीचे एक फॉर्म है। यह पृष्ठ प्रगतिशील वृद्धि का उपयोग करता है। इसलिए यदि जावास्क्रिप्ट अक्षम है तो फॉर्म सामान्य की तरह सबमिट करता है, डेटाबेस को टिप्पणी जोड़ता है, फिर ब्लॉग पोस्ट को प्रस्तुत करने वाली कार्रवाई पर रीडायरेक्ट करता है। हालांकि, यदि जावास्क्रिप्ट उपलब्ध है तो jQuery फॉर्म के सबमिट को हाइजैक करता है और पोस्ट को AJAX के माध्यम से बनाता है। ठीक है क्योंकि टिप्पणी मार्कअप एक डिस्प्ले टेम्पलेट में है, मुझे नहीं पता कि इसे एक्शन विधि से कैसे वापस किया जाए ताकि jQuery इसे पृष्ठ पर छोड़ सके।

मुझे पता है कि आंशिक विचारों के साथ इसे कैसे किया जाए। मेरे पास केवल कार्रवाई विधि सही आंशिक दृश्य लौटाएगी और jquery पृष्ठ पर टिप्पणी कंटेनर को प्रतिक्रिया जोड़ देगा।

आंशिक दृश्य के पक्ष में मेरे प्रदर्शन टेम्पलेट को बंद करने से पहले, क्या कोई सीधा आगे तरीका है कि मैं नियंत्रक से डिस्प्ले टेम्पलेट वापस भेजने के लिए अनुपलब्ध हूं?

यहाँ मेरी कार्रवाई विधि है:

public ActionResult AddComment(PostComment postComment) 
    { 
     postComment.PostedDate = DateTime.Now; 
     postCommentRepo.AddPostComment(postComment); 
     postCommentRepo.SaveChanges(); 
     if (Request.IsAjaxRequest()) 
      return ??????? 
     else 
      return RedirectToAction("BlogPost", new { Id = postComment.BlogPostID }); 
    } 

पृष्ठ लोड क्योंकि यह मानक तरीके से टेम्प्लेट का उपयोग किया इसके बारे में चिंता की जरूरत नहीं है जब:

<div class="comments"> 
    @Html.DisplayFor(x => x.BlogPost.BlogPostComments) 
</div> 

मैं बस चाहता हूँ यह जानने के लिए कि मैं एक टिप्पणी कैसे भेज सकता हूं जो प्रदर्शन टेम्पलेट का उपयोग jQuery पर वापस करता है।

उत्तर

2

क्या this question आपको वह चीज़ देता है जो आप खोज रहे हैं? यह इंगित करता है कि आप किसी कार्रवाई से HTML सहायक को कॉल कर सकते हैं।

+1

यह जवाब है, हालांकि यह पूरे विचार hackish है। मैं बस इस पर आंशिक दृश्य के साथ फंस गया। लेकिन फिर भी जवाब के लिए धन्यवाद। – Chev

10

आप नव तैनात टिप्पणी का प्रतिनिधित्व आंशिक एचटीएमएल लौटने की कोशिश कर सकते हैं:

$.post('@Url.Action("AddComment")', { ... }, function (result) { 
    $('#comments').append(result); 

    // or $('#comments').prepend(result); if you want it to appear on top 
}); 
0

एक आंशिक दृश्य बनाएँ/साझा:

if (Request.IsAjaxRequest()) 
{ 
    return PartialView(
     "~/Views/Shared/DisplayTemplates/Comment.cshtml", 
     postComment 
    ); 
} 

और क्लाइंट साइड पर टिप्पणी कंटेनर को यह टिप्पणी संलग्न तब

@Html.DisplayFor(m => Model) 

: निम्नलिखित उस्तरा कोड के साथ /DisplayTemplate.cshtml तब ओपी के मामले में

protected PartialViewResult PartialViewFor(object model) 
{ 
    return PartialView("DisplayTemplate",model); 
} 

: अपने नियंत्रक में (या अधिमानतः एक आधार नियंत्रक कक्षा में) इन पंक्तियों के साथ एक विधि जोड़ने

public ActionResult AddComment(PostComment postComment) 
{ 
    postComment.PostedDate = DateTime.Now; 
    postCommentRepo.AddPostComment(postComment); 
    postCommentRepo.SaveChanges(); 
    if (Request.IsAjaxRequest()) 
     return PartialViewFor(postComment); 
    else 
     return RedirectToAction("BlogPost", new { Id = postComment.BlogPostID }); 
} 
+0

आप आंशिक दृश्य के माध्यम से प्रदर्शन टेम्पलेट्स वापस नहीं करते हैं। आप आंशिक दृश्य "DisplayTemplate" नाम दे सकते हैं लेकिन यह वही बात नहीं है। – Chev

+0

आंशिक दृश्य को "DisplayTemplate" कहा जाता है लेकिन मैं इसे कुछ भी कह सकता था। मुद्दा यह था कि आंशिक तब मॉडल को एमवीसी टेम्पलेटिंग इंजन पर भेजता है ताकि यदि आपके पास मॉडल के लिए डिस्प्ले टेम्पलेट है तो इसका उपयोग किया जाएगा। – comonuirons

+0

मुझे पता है कि आप क्या कर रहे हैं, लेकिन यह खाली आंशिक विचार बनाता है जो केवल डिस्प्ले टेम्पलेट्स को कॉल करता है, जिसे मैं बहुत पसंद नहीं करता हूं। – Chev

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