2009-06-05 18 views
7

मैं है विचारों में तर्क का एक बहुत से पता है कि विचारों उन में लेकिन एक परियोजना मैं मैं पर काम कर रहा हूँ में कोड नहीं होना चाहिए हूँ।ASP.NET MVC में आंशिक दृश्य से तर्क निकाल रहा है

मेरे मुख पृष्ठ आंशिक दृश्य मैं इस तरह तर्क का एक बहुत कुछ है aweful में

<% Html.RenderPartial("SearchResults"); %> 

है अब;

<div id="RestaurantsList"> 
<%if (Model.restaurantsList.Count() > 0) 
{ 
    foreach (var item in Model.restaurantsList) 
    { %> 
     <% Html.RenderPartial("SearchResult", item); %> 

    <% 
    } %> 
<% 
} 
else 
{ 
    Html.RenderPartial("NoResults"); 

} %> 

अब मैं घर नियंत्रक सूची खाली किया जा रहा है के आधार पर एक अलग दृष्टिकोण वापसी कर सकता है, लेकिन मैं वास्तव में नहीं चाहते हैं कि सूचकांक को देखने के लिए कुछ चीजें है कि मैं कोई बात नहीं प्रदर्शित होते देखना चाहते है के रूप में अगर परिणाम हैं या नहीं।

एकमात्र अन्य चीज जो मैं यहां सोच सकता हूं वह है एचटीएमएल। सर्च रिसेट्स जैसे एक सहायक विधि में इसे समाहित करना। लेकिन फिर मुझे प्रत्येक खोज परिणाम के लिए रेंडरपार्टियल को कॉल करने के लिए सहायक की आवश्यकता होगी। यह चिंताओं के साफ पृथक्करण की तरह प्रतीत नहीं होता है।

मैं अभी भी अगर आंशिक दृश्य में बयान हालांकि पहले है करने के लिए होगा।

आप इसे कैसे संभालेंगे?

+0

+1 हमेशा सोचा कि इस मामले में सबसे अच्छा अभ्यास क्या है। –

उत्तर

13

मेरी व्यक्तिगत राय यह है कि यह ठीक है। आपके द्वारा उपयोग किया जाने वाला तर्क पूरी तरह से संबंधित है कि मॉडल को कैसे प्रदर्शित किया जाना चाहिए।

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

+0

हाँ मैंने सोचा कि। तो यह प्रदर्शन तर्क के लिए ठीक है। मैं जल्द ही आपका उत्तर स्वीकार करूंगा। मैं देखना चाहता हूं कि पहले कोई अन्य विपक्षी है या नहीं;) – ddd

10

मैं प्रवीण अंजीन के उत्तर से सहमत हूं। एकमात्र चीज जो मैं कह सकता हूं उसका जवाब बढ़ाने के लिए व्यूमोडेल में कुछ तर्क डालना है।

ViewModel में उदाहरण के लिए आप

Model.restaurantsList.Count() > 0

एक विधि या संपत्ति के पीछे

छिपाने सकता है।

उदा .:

<%if (Model.HasResturant){...}%> 
1

इस जवाब अपने प्रश्न के साथ कोई संबंध नहीं है।

हालांकि, मैं तो बस आप जानते हैं कि बुला Html.RenderPartial() एक पाश अंदर कुशल नहीं है बताना चाहते हैं।
ASP.NET MVC - For loop inside RenderPartial or Outside RenderPartial

इसे नीचे की तरह कुछ बदलना बेहतर होगा।

<%if (Model.restaurantsList.Count() > 0) 
{ 
    // render the Restaurant item right away 
    foreach (var item in Model.restaurantsList) { %> 
     <div> 
      <%= Html.Encode(item.RestaurantName); %><br /> 
      <%= Html.Encode(item.Address); %> 
     </div> 
    <% } 
} 
else 
{ 
    Html.RenderPartial("NoResults");  
} %> 
+0

जब तक एमवीसी 3 में कुछ बदलाव नहीं हुआ है, यह पूरी तरह से सच है। व्यूएं जो आंशिक आंशिक हैं, उन्हें कैश नहीं करते हैं, और उन्हें हर पुनरावृत्ति को 'रिफंड' करना होगा। –

1

प्रवीण Angyan सही है - उस दृश्य तर्क है और यह है कि यह है कि वह कहाँ है ठीक है।
लेकिन यह साफ विचारों की आवश्यकता नहीं बदलता है।

बस छोटे सुधार को साझा करना चाहता था।
हम छोटे HtmlHelper विधि देते हैं, तो हम कुछ इस तरह के दृश्य को छोटा कर सकते हैं:

<div id="RestaurantsList"> 
<% if (Model.HasRestaurants) 
    Html.RenderPartialForEach("SearchResult", Model.restaurantsList);  
else  
    Html.RenderPartial("NoResults"); %> 
</div> 

कुछ के लिए - यह पठनीय और अच्छा नहीं लग सकता है, लेकिन यह काफी अच्छा मेरे लिए फिट बैठता है।

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