2011-10-28 12 views
6

Rozumiem, że widok powinien wyświetlać tylko rzeczy i nie zawierać logiki poza tym, co jest wymagane do wyświetlania informacji.Jak powinny wyglądać "oddzielone"?

Jaki jest najlepszy sposób na utrzymanie to na uwadze, aby obsłużyć tego rodzaju prostego scenariusza: kliknięć

  1. User Delete
  2. Jeśli pozycja jest nadal związany z innymi, show „można "nie usuwaj tego."
  3. Else, pokaż formularz potwierdzenia, że ​​posty do działania/Delete/Id

mogę bardzo łatwo w widoku zrobić coś takiego:

@if (Model.Children.Count > 0) 
{ 
    <p> 
    You can't delete this! 
    </p> 
} 
else 
{ 
    using (Html.BeginForm()) 
    { 
    <p> 
     Are you really sure you want to delete this? 
    </p> 
    <p> 
     <input type="submit" value="Confirm" /> | 
     @Html.ActionLink("Cancel", "Index") 
    </p> 
    } 
} 

Czy istnieje powód, aby zrobić dwa widoki i czy kontroler zwraca odpowiedni widok w zależności od liczby dzieci? Wygląda na kompromis prostoty i oddzielenia obaw.

+0

użyję dwa widoki , zawsze jest lepiej, aby twoje poglądy były tak proste, jak to tylko możliwe. –

Odpowiedz

4

Jest to dość prosty przykład, więc na pierwszy rzut oka wydaje się nieszkodliwy (a jeśli tak się stanie, to na pewno jest). Pamiętaj jednak o tych czynnikach:

  • Co, jeśli stanie się czymś więcej niż tylko dziećmi? Być może trzy inne związki pojawiają się z czasem, a teraz musisz sprawdzić je wszystkie w swoim widoku? Nagle zapach kodu jest dużo silniejszy.
  • Umieszczenie tego rodzaju logiki w kontrolerze może sprawić, że inne podejścia do problemu staną się bardziej oczywiste lub łatwe później, np. Dodanie wersji ajaxowej, która umożliwia użytkownikowi przekazanie informacji zwrotnej "nie można usunąć" bez opuszczania poprzedniego strona.
3

Oddzielę je w 2 różnych widokach i ustawię akcję kontrolera na podstawie wartości modelu widoku (w tym przypadku Children.Count). Ale to znaczy, że inne podejście też nie jest złe. Działa to dobrze w prostych scenariuszach takich jak ten.

2

Dla tego rodzaju scenariusza zazwyczaj miałbyś właściwość Model, która faktycznie była flagą tego, czy możesz ją usunąć, czy nie (jest to bardziej zgodne z podejściem ViewModel), aby widok nie był faktycznie wykonując logikę, kontroler po prostu mówi widokowi, jakie działanie jest dostępne.

@if(Model.CanDelete) { 
    using (Html.BeginForm()) 
    { 
     <p> 
     Are you really sure you want to delete this? 
     </p> 
     <p> 
      <input type="submit" value="Confirm" /> | 
      @Html.ActionLink("Cancel", "Index") 
     </p> 
    } 
} else { 
    <p>You can't delete this!</p> 
} 

CanDelete mogą być wypełnione w regulatorze przy użyciu kombinacji stanu danych dziecko, rola, status członkostwa biznesu itp ale na widok wszystkich tych rzeczy nie powinno mieć znaczenia

Powiązane problemy