2010-12-29 12 views
6

próbowałem znaleźć sposoby tworzenia szablonów edytorów dla typów zerujących za pomocą maszynki do golenia. Mam właściwości w klasie LinqToSQL, które są typu Guid i Nullable. kiedy używam @model Guid? w pierwszym wierszu pliku Guid.cshtml, zawsze zakładam Guids jako Guid? typy. Chciałem stworzyć inny szablon edytora dla Guida ?, ale nazwy plików nie akceptują? lub < lub> znaków.jak tworzyć szablony edytorów dla Nullable <T> w Razor

proszę o pomoc. dzięki.

+1

Wypróbowałeś '@model Nullable ' zamiast "@model Guid?"? – Buildstarted

+0

Tak, tak, myślę, że działało lepiej, niż się spodziewałem. Chcę, żeby był to inny szablon pliku/edytora, ale myślę, że to zrobi. Dzięki. głosować na ciebie .. – AceMark

+0

Wydaje się to działać, jeśli używasz np. '@model Nullable ' czy po prostu '@model Guid?' (nawet jeśli przejdziesz normalny, nie-nullable, wydaje mi się, że to działa i działa), ale chciałbym również dowiedzieć się więcej na ten temat. Czy jest możliwe utworzenie oddzielnych szablonów dla typów regularnych i zerowanych (co byś zastąpił? Lub < and > w nazwach plików)? Czy jest to zalecany styl tylko po to, aby szablon dla typu zerowego obsłużył oba przypadki? –

Odpowiedz

4

Chyba wyślę to jako odpowiedź :)

próbowałeś @model Nullable<Guid> zamiast @model Guid?

6

Wydaje się, że w przypadku zerowych typów wartości intencją jest napisanie jednego szablonu wyświetlania/edytora, który obsługuje zarówno typy z wartością pustą, jak i nie-null. Oto fragment z post Brad Wilson:

Przy szukaniu nazwy typu, prosta nazwa jest używana (tj Type.Name) bez nazw. Ponadto, jeśli typ jest Nullable, szukamy T (więc otrzymasz szablon Boolean, niezależnie od tego, czy używasz "bool", czy "Nullable"). Oznacza to, że jeśli piszesz szablony dla typów wartości, musisz rozważyć, czy wartość jest zerowa czy nie. Możesz użyć właściwości IsNullableValueType z ModelMetadata, aby określić, czy wartość jest zerowa. Zobaczymy poniższy przykład z wbudowanym szablonem Boolean.

Użyjesz więc w swoim szablonie @model Guid? i sprawdź, czy są puste.