Umieszczanie logiki w widoku MVC

Umieszczanie logiki w widoku MVC
A0
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 3 lata
  • Postów:29
0

Witam,
Pisząc sobie aplikację zastanawiam się czy umieszczanie jakiejkolwiek logiki w widoku jest zgodne z powszechnie stosowanymi praktykami.
Co dokładnie mam na myśli np. mam jakieś produkt ( cokolwiek mało istotne jaki ...) i jego wybranie zależne jest od dostępności lub czy ktoś wcześnie nie zarezerwował. Przycisk do wybrania były aktywny lub nie czy dany produkt jest dostępny. Czy dodanie if'a do widoku jest w ogóle sensowne m.in w tym przypadku i ustawienie przycisku w na aktywny lub nieaktywny ? W widoku korzystam z Razor'a

Aventus
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:UK
  • Postów:2235
4

No jakoś musisz zdecydować czy przycisk powinien byc dostępny. Zakładając że Twój model ma odpowiednie flagi, np. IsAvailable, używasz IFa do kontroli wyświetlania elementu. Natomiast o tym czy produkt jest dostępny czy nie powinna właśnie zajmować się logika aplikacji.


Na każdy złożony problem istnieje rozwiązanie które jest proste, szybkie i błędne.
edytowany 1x, ostatnio: Aventus
WeiXiao
  • Rejestracja:około 9 lat
  • Ostatnio:około 3 godziny
  • Postów:5135
2

Widok nie powinien być ostatnim walidatorem możności wykonania czegoś, bo jest to łatwe do zhackowania, tyle z teorii.

Następnie jak @Aventus wspomniał zwracasz na widok coś typu flagi lub jakieś listy czy co tam chcesz, co determinuje czy user

a) widzi dany element

lub czasem

b) czy ma dostęp do danych

edytowany 5x, ostatnio: WeiXiao
A0
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 3 lata
  • Postów:29
0

Konkretnie chodziło mi o coś takiego jak poniżej, czy jest to powszechnie stosowane w widokach czy może w większych projektach jest to inaczej rozwiązane ?
Oczywiście całą logiką zajmują się odpowiednie klasy, nie widok. Do widoku przekazuję dane tylko z ViewModel.

Kopiuj
@model ViewModel

@if (Model.IsReserved)
button = true
else 
button false
Aventus
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 2 lata
  • Lokalizacja:UK
  • Postów:2235
3

Tak się to robi. Oczywiście powyższy kod można by zapisać w jednej linii ale nie o tym temat.


Na każdy złożony problem istnieje rozwiązanie które jest proste, szybkie i błędne.
BU
  • Rejestracja:około 10 lat
  • Ostatnio:28 dni
  • Postów:422
2

Gdyby takie instrukcje w widoku nie były dozwolone, to istnienie Razora nie miałoby sensu.

Ale w Twoim przypadku nie musisz używać instrukcji if, bo Razor dobrze sobie radzi z takim zapisem:

Kopiuj
<button disabled="@Model.IsReserved">Reserve</button>

Jeśli Model.IsReserved ma wartość false, to atrybut disabled nie pojawi się w wyrenderowanym kodzie HTML, a jeśli ma wartość true, to atrybut pojawi się w formie zgodnej ze standardem XHTML disabled="disabled".

edytowany 2x, ostatnio: Burmistrz

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.