2011-02-09 11 views
6

Pracuję z MVC 3 w momencie, w którym używam ViewBag. Chciałbym przetestować, czy przypisano jedną z właściwości ViewBag. Wiem, że w PHP można zrobić isset (zmienną), ale czy jest coś podobnego w .NET 4?Co to jest równoważnik isset PHP w C# .NET 4 dla właściwości "dynamicznych" obiektów?

Scenariusz polega na tym, że utworzę układ zagnieżdżony, który pobiera tytuł sekcji i podtytuł sekcji przez ViewBag. Są one oddzielone separatorem, a podtytuł jest opcjonalny. Nie chcę wyświetlać seperatora, jeśli podtytuł nie jest ustawiony.

Tak to sobie wyobrażam, gdzie zestaw znaków zostanie zastąpiony przez equivallant .NET 4.

@section header 
{ 
    <h2>@ViewBag.SectionTitle</h2> 
    @if(isset(ViewBag.SectionSubTitle)) 
    { 
     <div id="section-title-seperator"> - </div><h3>@ViewBag.SectionSubTitle</h3> 
    } 
} 

Obok bezpośredniej odpowiedzi na moje pytanie, jestem również otwarty na alternatywne rozwiązania (w przypadku, gdy nadużywam ViewBag).

Z góry dziękuję.

Odpowiedz

14

Można sprawdzić, czy jest null tak:

@if(ViewBag.SectionSubTitle != null).

isset() w PHP faktycznie sprawdza, czy jest obecna wartość. Z instrukcji:

isset() zwróci FALSE jeśli testowanie zmienną, który został ustawiony na NULL

Można również użyć ViewDataDictionary.ContainsKey na nieruchomości ViewData. Ponieważ ViewData["SectionSubTitle"] jest equavilient do ViewBag.SectionSubTitle więc w tym przypadku można zrobić:

@if(ViewData.ContainsKey("SectionSubTitle"))

+0

Ahh, ok dzięki. BTW, tylko po to, aby zapewnić, że nie nadużywania ViewBag w tym przypadku, prawda? –

+0

Polecam, abyś później ją zreorganizował. Najpierw działaj. Nie nadużywaj ViewBag, zastanów się, jak pogrupować rzeczy w oddzielne modele. –

+0

+1 dla ViewData.ContainsKey –