Próbuję obejść fakt, że kiedy napisał asp.net MVC 3, zapomnieli dołączyć kod, aby dodać dyskretne atrybuty sprawdzania poprawności do wybierania list i ich "fix", ponieważ ma to obejmować to w MVC 4, który nie jest żadnym krwawym użytkiem dla kogokolwiek używającego MVC 3.Jak korzystać z Html.GetUnobtrusiveValidationAttributes()
Proponowana praca polega na użyciu Html.GetUnobtrusiveValidationAttributes()
, aby dodać je samodzielnie, tak jak wszystkie inne niestandardowe atrybuty, ale nie mogę wyliczyć poprawnej składni do wywoływania metody. Występują 2 przeciążenia, jeden bierze ciąg, a drugi przyjmuje ciąg i klasę ModelMetaData. Rozumiem paradę metadanych, domyślam się, że po prostu przekazuję ViewData.ModelMetadata
, ale jaki powinien być łańcuch? Dokumentacja MSDN mówi, że jest to "określony atrybut nazwy HTML", który nie ma dla mnie żadnego sensu. Jaki jest atrybut nazwy HTML? Lista wyboru? Dlaczego miałoby to być potrzebne i jak to pomóc, aby wiedział, jakie właściwości w moim modelu chcę zatwierdzić? Patrząc na przykłady użycia, wszystkie wydają się przekazywać nazwę właściwości w moim modelu, dla której chcę atrybuty sprawdzania poprawności, co ma sens. Niestety nie mogę uzyskać metody zwracania niczego poza pustą kolekcją, niezależnie od tego, co przekazuję.
Moja klasa modelu nosi nazwę zdarzenia, a moja właściwość nosi nazwę EventTypeID. Używam nieco innej klasy viewmodel jako podstawy dla widoku, ponieważ potrzebuję wyświetlić listę zdarzeń, a także pozwolić na wpisanie nowego zdarzenia w tym samym widoku, więc mam prostą klasę viewmodel jak poniżej:
public class EventViewModel
{
public Model.Event NewEvent { get; set; }
public IEnumerable<Model.Event> Events { get; set; }
}
Lista rozwijana jest mapowana do usługi, na przykład: @Html.DropDownListFor(model => model.NewEvent.EventTypeID
co przekazuję jako ciąg do Html.GetUnobtrusiveValidationAttributes(string)
lub Html.GetUnobtrusiveValidationAttributes(string, ModelMetadata)
, aby uzyskać atrybuty dla tej właściwości. Próbowałem:
Html.GetUnobtrusiveValidationAttributes("EventTypeID")
Html.GetUnobtrusiveValidationAttributes("EventTypeID",ViewData.ModelMetadata)
Html.GetUnobtrusiveValidationAttributes("NewEvent.EventTypeID")
Html.GetUnobtrusiveValidationAttributes("NewEvent.EventTypeID",ModelMetadata)
Wszystkie zwracają pustą kolekcję.
Wiem, że mój model jest poprawny, ponieważ jeśli zmieniam wywołanie z Html.DropDownListFor
na Html.TextBoxFor
, sprawdzanie poprawności "po prostu działa" bez konieczności wykonywania innych czynności niż dodawanie atrybutów sprawdzania poprawności do mojej klasy modelu.
EDIT:
właśnie próbował włączeniu walidacji po stronie klienta off, walidacja działa poprawnie po stronie serwera dla wszystkich listach wyboru.
widziałem, że już wcześniej napisałem, nie jestem pewien, że w pełni zrozumieć kod, więc mam przechowywaną z korzystania z niej. Czy mógłbyś wyjaśnić mi, co robię źle, jak na moje pytanie i wyjaśnić, co powinienem przechodzić do GetUnobtrusiveValidationAttributes(), aby uzyskać atrybuty dla mojego modelu? –