سؤال

أنا أدرك أن الآراء يجب ألا يكون لها مدونة فيها ولكن في مشروع أعمل عليه، لدي الكثير من المنطق في الآراء.

صفحتي الرئيسية لديها

<% 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");

} %>

الآن يمكنني إرجاع وحدة التحكم المنزلية عرضا مختلفا يستند إلى القائمة فارغة، لكنني لا أريد حقا أنه نظرا لأن عرض الفهرس يحتوي على بعض الأشياء التي أريد عرضها بغض النظر عما إذا كانت هناك نتائج أم لا.

الشيء الآخر الوحيد الذي يمكنني التفكير فيه هنا هو التغلب على هذا في طريقة مساعد مثل HTML.SearchResults. ولكن بعد ذلك، سأحتاج إلى المساعد لاستدعاء RenderPartial لكل نتيجة بحث أيضا. هذا لا يبدو وكأنه منفصلة نظيفة للمخاوف.

ما زلت يجب أن أحصل على البيان الأول إذا كان في الرأي الجزئي.

كيف يمكنك التعامل مع هذا أفضل؟

هل كانت مفيدة؟

المحلول

رأيي الشخصي هو أن هذا على ما يرام. يرتبط المنطق الذي استخدمته تماما بكيفية عرض النموذج.

تحتاج فقط إلى أن تكون على علم وتأكد من أنك لا تختلط أبدا في منطق الأعمال، ومنطق الوصول إلى البيانات أو أي شيء آخر لا يرتبط بصرامة في عرض النموذج.

نصائح أخرى

وأنا أتفق مع إجابة برافين anygan. الشيء الوحيد الذي يمكن أن أقوله لتوسيع إجابته هو وضع بعض المنطق في ViewModel.

على سبيل المثال في ViewModel، يمكنك إخفاء

Model.restaurantsList.Count() > 0

وراء طريقة أو ممتلكات.

على سبيل المثال:

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

هذه الإجابة لا علاقة لها بالسؤال الخاص بك.

ومع ذلك، أريد فقط أن أخبرك أن الاتصال HTML.RenderPartial () داخل حلقة ليس فعال.
ASP.NET MVC - لحلقة داخل Renderpartial أو خارج 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");    
} %>

Praveen Anygyan صحيح - هذا يرى المنطق وهذا جيد أنه هو المكان الذي يكون فيه.
ولكن هذا لا يغير الحاجة إلى وجهات النظر المدييه.

أردت فقط مشاركة تحسين صغير.
إذا نعلق طريقة Tiny Helhelper، فيمكننا تقصير العرض إلى شيء مثل هذا:

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

بالنسبة للبعض - قد لا تبدو مقروءة ولطيفة، لكنها تناسبني جيدا بما فيه الكفاية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top