Umieszczanie logiki w widoku MVC

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

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.

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

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.

@model ViewModel

@if (Model.IsReserved)
button = true
else 
button false
3

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

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:

<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".

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0