2011-05-31 10 views
8

क्या यह संभव है? मैं जो हासिल करना चाहता हूं उसके उदाहरण के लिए, फेसबुक टिप्पणी प्रणाली ले लो। मौजूदा टिप्पणियां सर्वर पर प्रदान की जाती हैं, लेकिन अगर मैं एक नई टिप्पणी छोड़ देता हूं, तो यह क्लाइंट पर AJAX का उपयोग करके बनाया गया है। आदर्श रूप में, मैं केवल एक ही स्थान पर टिप्पणी के लिए टेम्पलेट को स्टोर करना चाहता हूं, और सर्वर (रेजर द्वारा प्रस्तुत) और क्लाइंट पर (सर्वर द्वारा जेएसओएन का उपयोग कर जावास्क्रिप्ट में प्रस्तुत) दोनों पर इसका उपयोग करना है।क्लाइंट और सर्वर दोनों के लिए एएसपी.नेट एमवीसी टेम्पलेट्स

कोई विचार?

संपादित: मुझे लगता है कि एक और विकल्प विशुद्ध रूप से सर्वर साइड प्रतिपादन के साथ रहना है, और जब उपयोगकर्ता पदों एक नई टिप्पणी, ब्राउज़र को प्रदान की गई एचटीएमएल लौट डोम में भरा जाना है। यह काफी अच्छा नहीं है, लेकिन मुझे यह जानने में दिलचस्पी होगी कि यह भी संभव है या नहीं।

उत्तर

8

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

मैं PHP और JS का उपयोग करके इसे प्राप्त करने के लिए मूंछ टेम्पलेटिंग इंजन का उपयोग कर रहा हूं। एक .NET संस्करण है जो मुझे लगता है कि एएसपी.नेट के लिए काम करता है, और मुझे लगता है कि आप ASP.NET का उपयोग कर रहे हैं।

तो मैं क्या करता हूं यह सुनिश्चित करता है कि मेरे पास PHP और JS में उसी तरह से डेटा स्वरूपित किया गया है और फिर मूंछ टेम्पलेट का उपयोग करके प्रस्तुत किया गया है।

http://mustache.github.com/

मूंछें उपयोग करने के लिए सरल है। आप एक ऑब्जेक्ट और एक टेम्पलेट लेते हैं और आपको HTML वापस मिल जाता है।

उदाहरण वस्तु:

object->user = "Kilroy" 
object->comment = "was here" 
object->edited = true 

उदाहरण टेम्पलेट:

{{user}} {{comment}} {{#edited}}(This comment has been edited){{//edited}} 

परिणाम:

Kilroy was here (This commment has been edited) 
+0

मुझे मूंछ का .NET संस्करण नहीं मिल रहा है। होमपेज को छोड़कर हर दूसरी भाषा का उल्लेख है! –

+1

यह वहां है! [.NET] (https://github.com/jdiamond/Nustache) – Vilhelm

+0

हां, मैं अंधेरा था, धन्यवाद। –

2

मेरे द्वारा उपयोग किए जाने वाले दृष्टिकोण में वाइल्डकार्ड और/या कक्षा के नामों के साथ एक छिपी हुई HTML टेम्पलेट है, फिर दस्तावेज़ तैयार पर AJAX/JSON कॉल के माध्यम से सामग्री को लोड किया गया और आखिरकार जावास्क्रिप्ट में एक ही टेम्पलेट का उपयोग करके ताज़ा या नए आइटम जोड़े गए।

<ul id="template"> 
    <li> 
    <span class="message"></span> 
    <span class="date"></span> 
    </li> 
</ul> 

<ul id="comments"></ul> 

<script type="text/javascript"> 
    $().ready(function() { 
     loadComments(); 
    }); 
    function loadComments() { 
     $.post('@Url.Action("GetComments", "Forum")', {}, function(comments) { 
      for (i = 0; i < comments.length; i++){ 
       loadComment(comments[i]); 
      } 
     }, 'json'); 
    } 
    function loadComment(comment) { 
     var template = $('#template li').clone(); 
     template.find('.message').text(comment.message); 
     template.find('.date').text(comment.date); 
     $('#comments').append(template); 
    } 
</script> 

नए संदेशों के लिए, आप सर्वर से संदेश पोस्ट कर सकते हैं और फिर सूची में जोड़ने के loadComment समारोह का उपयोग कर, या पूरी टिप्पणियां सूची को ताज़ा करें। यह एक पूर्ण नमूना नहीं है, लेकिन उम्मीद है कि आपको विचार मिल जाएगा।

+0

मैं इस दृष्टिकोण पर भी विचार कर रहा था, लेकिन मुख्य दोष (i) मौजूदा सामग्री स्पाइडर के लिए खोज इंजन के लिए उपलब्ध नहीं होगी, और (ii) पृष्ठ अब शानदार रूप से अपमानित नहीं होता है, क्योंकि सीएसएस बिना ब्राउज़र डिस्प्ले को बताता है: कोई भी टेम्पलेट उपयोगकर्ता को दिखाई नहीं देगा। तुम क्या सोचते हो? –

+1

ठीक है, इसमें कमी है लेकिन, (i) मैंने खोज इंजन मकड़ियों के लिए गतिशील साइटमैप बनाए हैं और हाल ही में स्पाइडर AJAX लोड की गई सामग्री के बारे में समझदार हो रहे हैं। (ii) क्षमा करें, टेम्पलेट में शैली = "प्रदर्शन: कोई नहीं होना चाहिए"। आप इस कोड ब्लॉक बनाने के लिए हेल्पर्स (और रेज़र कॉलबैक) बना सकते हैं। –

0

मैं उस्तरा या ASP.NET MVC के साथ ज्यादा काम नहीं किया है, लेकिन जिस तरह से मैं आमतौर पर मोनोरेल और एनवेलोकिटी का उपयोग करके इसका उपयोग करता हूं:

पेज के लिए एक टेम्पलेट है। टिप्पणियों के लिए, एक आंशिक टेम्पलेट है जिसे आप अपने मुख्य टेम्पलेट में शामिल करते हैं। AJAX अनुरोध के लिए, टिप्पणियों के भाग के लिए मार्कअप प्रस्तुत करने के लिए उस आंशिक टेम्पलेट का उपयोग करें। इसे अपनी पसंदीदा विधि के साथ क्लाइंट पक्ष को बदलें।

इस तरह, आपको एक स्थान पर मार्कअप करने की अनुमति होगी, भले ही यह नियमित अनुरोध है या AJAX अनुरोध है।

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