2010-05-26 19 views
5

W moich widokach piszę mnóstwo kodu, który wygląda jak poniższy kod. W tym przypadku chcę dodać jakiś wyjaśniający kod HTML dla nowicjusza i inny kod HTML dla eksperta.Logika rozgałęziania w widoku MVC

<% if (ViewData["novice"] != null) { %> 
some extra HTML for a novice 
<% } else { %> 
some HTML for an expert 
<% } %> 

To jest logika prezentacji, więc ma sens, że jest w widoku w stosunku do kontrolera. Jednak robi się brzydko bardzo szybko, szczególnie, gdy ReSharper chce przesunąć wszystkie nawiasy klamrowe, aby było jeszcze brzydsze (czy istnieje sposób, aby wyłączyć to dla widoków?).

Moje pytanie brzmi, czy to jest właściwe, czy powinienem rozgałęzić kontroler do dwóch osobnych widoków? Jeśli wykonam dwa widoki, będę miał wiele zduplikowanych plików HTML do zachowania.

Czy powinienem zrobić dwa osobne widoki ze wspólnym, częściowym widokiem rzeczy, które są wspólne?

Odpowiedz

2

Idealnie, ten rodzaj logiki byłby obsługiwany w modelu widoku, a widok powinien po prostu renderować model.

Więc może masz coś w widoku:

<%= ViewData["helptext"] %> 

i logika w kontroler byłoby coś jak:

ViewData["helpText"] = isNovice ? noviceText : expertText; 

ten sposób można popchnąć tę logikę do sterownika i utrzymuj swoje poglądy ładne i czyste

+0

Widzę zalety tego, ale co, jeśli tekst jest skomplikowanym znacznikiem HTML, powiedzmy obrazkami i podobnymi rzeczami? Teraz masz HTML w kontrolerze. Ponadto, dzięki za naprawienie mojego przykładu kodu –

+0

Lomax Nice znacznie lepiej. Lubię to. +1 –

+0

Zależy od tego, jaka jest sytuacja w przypadku złożonego tekstu i ile zmian jest wymagana, ale nie widzę powodu, dla którego to samo podejście nie może być użyte do renderowania zmiennych części. – lomaxx

1

Próbujesz utworzyć 2 całkowicie oddzielne strony html z identycznymi modelami. Chcesz osobnego widoku. Nie próbuj wymyślić sprytnie wzoru z logiką warunkowego rozgałęzienia.

Pomocnicy HTML nie pomogą ci tutaj zbyt wiele, ponieważ wygląda na to, że nie powtórzysz zbyt wiele logiki, jeśli nie.

+0

Wszystko, co mogę powiedzieć, nawet bez powtarzania logiki wolałbym używać pomocnika zamiast duplikowania kodu. Powielenie kodu powoduje po prostu bóle konserwacyjne i powinno być niezadowolone z powodu –

+0

Nie sądzę, że chcesz mieć osobny widok, ponieważ spowodowałoby to dodatkowe koszty utrzymania. Byłbym bardziej skłonny przekazać logikę do kontrolera i mieć czysty widok – lomaxx

+0

Możesz wstawić powtarzający się kod w częściowy, ale duży obraz wydaje się, jakbyś chciał dwóch osobnych widoków, tj. "Inny HTML dla eksperta użytkownika" Powtarzanie kod jest zły, działanie przeciwko wzorowi jest gorsze IMO. –