2011-07-19 14 views
20

मेरे पास Asp.Net में एक वेबसाइट है कि मैं एमवीसी 3 पर पोर्ट करने की कोशिश कर रहा हूं और मैंने पहले ही एमवीसी 2 के साथ काम किया है। मैं निम्नलिखित एएसपी समारोहmvc 3 <asp: repeater> function के बराबर है?

<div class="popup-holder"> 
<ul class="popups"> 
    <asp:Repeater runat="server" ID="ourTeamRepeater" OnItemDataBound="ourTeamRepeater_ItemDataBound"> 
     <ItemTemplate> 
      <asp:Panel ID="pnlTeamMember" runat="server"> 
       <li id="TeamMember" runat="server" class="memberImage"> 
        <asp:Image runat="server" ID="memberImg" /> 
       </li> 
       <div class="popup"> 
        <div class="img-holder"> 
         <asp:Image runat="server" ID="memberImgBig" /> 
        </div> 
        <div class="popup-text-t"> 
         <div class="close"> 
          close 
         </div> 
        </div> 
        <div class="popup-text"> 
        </div> 
        <div class="popup-text-b"> 
        </div> 
        <div class="holder"> 
         <asp:Literal ID="memberDescription" runat="server" /> 
        </div> 
       </div> 
      </asp:Panel> 
     </ItemTemplate> 
    </asp:Repeater> 
</ul> 

यह लग रहा है शायद इस पाश के लिए एक करने के लिए इसी तरह काम करता है की तरह भर में ठोकर खाई है, लेकिन मैं काफी कैसे MVC 3 वास्तुकला के लिए यह कन्वर्ट करने के लिए सकारात्मक नहीं हूँ।

उत्तर

15

आप काफी लगता है कि एक एएसपी के MVC बराबर सही हो: पुनरावर्तक

<% foreach(var item in Model) 
    { %> 
     <!-- Your HTML Markup --> 
<% } %> 
6

आप सही के बारे में यह एक for पाश के लिए इसी तरह किया जा रहा है कर रहे हैं है। एक साधारण कार्यान्वयन इस प्रकार दिखाई देंगे:

<div class="popup-holder"> 
<ul class="popups"> 
    <%foreach(var item in Model.Items) { %> 
      <div id="pnlTeamMember"> 
       <img src="<%: item.MemberImageSrc %>" ID="memberImg" /> 
       <div class="popup"> 
        <div class="img-holder"> 
         <img src="<%: item.MemberImgBigSrc %>" ID="memberImgBig" /> 
        </div> 
        <div class="popup-text-t"> 
         <div class="close"> 
          close 
         </div> 
        </div> 
        <div class="popup-text"> 
        </div> 
        <div class="popup-text-b"> 
        </div> 
        <div class="holder"> 
         <%: item.MemberDescription %> 
        </div> 
       </div> 
      </div> 
    <% } %> 
</ul> 

आप runat="server" साथ अब किसी भी नियंत्रण नहीं है, और न ही में कोड-पीछे संचालकों से जुड़ा हुआ कोई भी ईवेंट देखते हैं कि ध्यान देंगे। इसके बजाए, हम मानते हैं कि नियंत्रक ने Model ऑब्जेक्ट को उस डेटा का प्रतिनिधित्व करने वाले ऑब्जेक्ट्स के साथ पॉप्युलेट किया है जिसे हमें प्रदर्शित करने की आवश्यकता है। एमवीसी का उपयोग करते समय नियंत्रक की भूमिका है।

+0

आप के बजाय foreach() का मतलब है(), मुझे यकीन है ;-) –

+0

@Steve: Ha! निसिचित रूप से किया! – StriplingWarrior

2

एक दोहराना केवल एक लूप है जो डाटाबेसिंग प्रदान करता है ताकि आप उस संग्रह में आइटम तक पहुंच सकें जो आप लूपिंग कर रहे हैं। यदि आप ourTeamRepeater_ItemDataBound विधि में देखते हैं तो आपको डेटा के साथ आइटम टेम्पलेट में तत्वों को पॉप्युलेट करने के लिए डाटाबेस आइटम का उपयोग करने वाला कोड मिलेगा।

आमतौर पर आप वस्तुओं को लूप करने के लिए एमवीसी में foreach पाश का उपयोग कर सकते हैं। उदाहरण:

<% foreach (var item in items) { %> 
    <div class="holder"> 
    <%= item.Description %> 
    </div> 
<% } %> 
+1

पुनरावर्तक में अतिरिक्त कैंडी है, हालांकि, वैकल्पिक वस्तुओं आदि जैसे –

37

ASP.NET MVC के लिए एक मौजूदा WebForms आवेदन Porting कुछ WebForms कोड है जो आप देखना न केवल लाइन द्वारा के बारे में आँख बंद करके अनुवाद रेखा है। आपको लक्ष्य प्लेटफ़ॉर्म के अर्थशास्त्र को ध्यान में रखना चाहिए। उदाहरण के लिए इस asp:Repeater को बदसूरत foreach लूप में परिवर्तित मॉडल जैसे चीजों को ध्यान में रखते हुए, प्रदर्शन टेम्पलेट्स बहुत अच्छा नहीं होगा।

तो ASP.NET MVC में आप को डिजाइन दृश्य मॉडल से शुरू:

public ActionResult Index() 
{ 
    IEnumerable<MemberViewModel> model = ... 
    return View(model); 
} 

तो आप एक दृढ़ता से टाइप किया दृश्य लिखें:

public class MemberViewModel 
{ 
    public int Id { get; set; } 
    public string Description { get; set; } 
} 

तो आप एक नियंत्रक कार्रवाई जिसे इस दृश्य मॉडल भरता डिजाइन जिसमें आप एक प्रदर्शन टेम्पलेट आह्वान:

@model IEnumerable<MemberViewModel> 
@Html.DisplayForModel() 

और फिर आप एक प्रदर्शन ते परिभाषित mplate जो संग्रह (~/Views/Shared/DisplayTemplates/MemberViewModel.cshtml) के प्रत्येक तत्व के लिए रेंडर किया जाएगा:

@model MemberViewModel 

<li id="TeamMember" class="memberImage"> 
    <img src="Url.Action("ThumbnailImage", new { id = Model.Id })" alt=""/> 
</li> 

<div class="popup"> 
    <div class="img-holder"> 
     <img src="Url.Action("FullImage", new { id = Model.Id })" alt=""/> 
    </div> 

    <div class="popup-text-t"> 
     <div class="close"> 
      close 
     </div> 
    </div> 

    <div class="popup-text"></div> 
    <div class="popup-text-b"></div> 

    <div class="holder"> 
     @Html.DisplayFor(x => x.Description) 
    </div> 
</div> 

अब आपके पास दो अतिरिक्त ThumbnailImage और FullImage नियंत्रक क्रियाएँ होगा हमें सदस्य आईडी दिया सदस्यों की छवियों को लाने के लिए अनुमति देता है देखेंगे। उदाहरण के लिए:

public ActionResult ThumbnailImage(int id) 
{ 
    byte[] thumbnail = ... 
    return File(thumbnail, "image/jpeg"); 
} 

अब यह एएसपी.नेट एमवीसी की तरह है। जैसा कि आप देख सकते हैं कि क्लासिक वेबफॉर्म की तुलना में यह एक बिल्कुल अलग पैटर्न है।

+0

न्यूबी एमवीसी प्रश्न - उपरोक्त कोड में '~/Views/Shared/displayTemplates/memberViewModel.cshtml' कहां/कैसे प्रस्तुत किया जाता है? – Chalky

+0

एक और नौसिखिया प्रश्न - इस कोड में पेजिंग कहां है? DisplayForModel() कैसे प्रदान करता है? एक पृष्ठ पर रिकॉर्ड्स की संख्या को कॉन्फ़िगर कैसे करें? – user1709408

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