Say Mam modelu jak tenklienta Html pomocnika, który może przeglądać DataAnnotations
public class User
{
[Required]
[StringLength(14, ErrorMessage = "Can only be 14 characters long")]
public string UserName;
}
Chcę utworzyć pomocnika html jak poniżej:
@Html.ValidatableEditorFor(m => m.UserName)
tak, że wypluwa pole tekstowe z poprawny format plugin jQuery Vaidation aby móc zweryfikować, tak:
<input type="text" class="required" maxlength="14" />
z moich badań, wydaje się, że nie ma sposób na powtórzenie wszystkich adnotacji danych w MetaDataModel, dzięki czemu mogę sprawdzić, które z nich mają zastosowanie do sprawdzania poprawności jQuery.
Jak mogę sobie wyobrazić, że pracuje w pseudo kod:
var tag = new TagBuilder("input");
tag.mergeAttribute("type", "text");
foreach(var attribute in metadata.attributes)
{
CheckForValidatableAttribute(attribute, tag);
}
...
private void CheckForValidatableAttribute(DataAnnotation attribute, TagBuilder tag)
{
switch(attribute.type)
{
case Required:
tag.addClass("required");
break;
case StringLength
tag.mergeAttribute("maxlength", attribute.value)
break;
}
}
Jak mogę iść o osiągnięciu pomocnika takiego? Chcę, aby działała na adnotacjach danych, aby nie musieć duplikować literałów sprawdzania poprawności.
Na przykład, obecni pomocnicy Html, tacy jak TextEditorFor, dołączają atrybuty walidowalne do ich pól wyjściowych. Jak to robi i jak mogę stworzyć własną implementację?
Cheers
Ale nie ma kolekcji MetaDataModel.Attributes. Jak mogę uzyskać listę wszystkich atrybutów, które może posiadać dowolny konkretny model? – Chris
Zobacz moją aktualizację .. – Aliostad
Zmieniono kod ValidationEditorFor tak, aby przechwycił właściwości ValidationAttribute z właściwości. Tak jak to było, szukał atrybutów na typie właściwości (string, int, cokolwiek). Kod działa świetnie teraz dzięki! :) – Chris