Zbyt często natrafiłem na sytuację, w której widok w moim projekcie powoduje zgłoszenie odwołania o wartości zerowej .Widoki MVC3: Obsługa modeli zerowych z finezją
@model Johnny.Application.TestModel
<div>@(Model.SomeText)</div>
to zgłasza błąd jeśli model jest zerowy.
Ale jak radzą sobie z tym ludzie? Na pewno nie widzę wszędzie przykładów kodu z brzydkimi zerami sprawdzającymi zaśmiecanie kodu w widoku. To prowadzi mnie do przekonania, że przez większość czasu kontrolerzy nie powinni zwracać modeli zerowych. Ale jak możesz wymusić to z większą finezją?
Teraz, gdy ktoś przypadkowo spowoduje, że kontroler zwróci model zerowy, model widoku wysadza się i wygląda na wadliwy. W rzeczywistości była to wina kontrolera. A widok może nawet nie "złapać" problemu, zrobi to tylko wtedy, gdy członkowie modelu zdążą się przyzwyczaić (co jest oczywiście w większości przypadków).
Z różnych powodów niektóre widoki mogą obsługiwać wartości puste. Nie spodziewałbym się, że będzie to jednak przypadek większości. Najwyraźniej chodzi o ustalenie jakiejś "umowy" między widokiem a kontrolerem.
Nie lubię opcje Widziałem:
- Sprawdź, czy model jest zerowa za każdym razem jest on wykorzystywany. Bardzo lame!
- Jedno z nich: duże, jeśli instrukcja zawija cały widok za pomocą zerowego modelu sprawdzania. Pomyśl o zmarnowanym kodzie nieruchomości. Kulawy!
- Dodaj numer , jeśli sprawdzisz rzutem u góry. Nieźle, ale wydaje się głupie. Lekko kulawy.
chciałbym wiedzieć, czy coś takiego istniało tych opcji, aby ustawić „null” nie zamówienia:
- atrybut na metodzie kontrolera jak [NoNullModels]. Wątpię, aby tak się stało, ponieważ nie sądzę, aby kontroler wiedział, do czego jest podłączony.
- W widoku, wskaźnik jak @ MVC3.HeyDontAllowNulls lub inny standardowy sposób rzuca wyjątek (jak opcja 3 powyżej)
po co zwracać model zerowy? –
wypróbowałeś '@ Html.DisplayFor (m => m.SomeText)' –
Na przykładowym przykładzie kodu 99% próbek kodu w Internecie jest pozbawionych obsługi wyjątków i sprawdzania poprawności danych wejściowych. Częściowo z lenistwa, a częściowo dlatego, że pomyliłoby to punkt, który ilustruje przykładowy kod. –