korzysta z .NET MVC i kodu-pierwszego EF do realizacji żądanej funkcjonalności. Obiekty biznesowe są względnie złożone i używam System.ComponentModel.DataAnnotations.IValidatableObject
do sprawdzania poprawności obiektu biznesowego.
Teraz próbuję znaleźć sposób, w jaki sposób wyświetlić wynik sprawdzania poprawności z obiektu biznesowego, używając MVC ValidationSummary bez użycia adnotacji danych. Na przykład (bardzo uproszczony): Object.NET MVC Niestandardowa walidacja (bez adnotacji danych)
działalności:
public class MyBusinessObject : BaseEntity, IValidatableObject
{
public virtual IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
return Validate();
}
public IEnumerable<ValidationResult> Validate()
{
List<ValidationResult> results = new List<ValidationResult>();
if (DealType == DealTypes.NotSet)
{
results.Add(new ValidationResult("BO.DealType.NotSet", new[] { "DealType" }));
}
return results.Count > 0 ? results.AsEnumerable() : null;
}
}
Teraz w moim kontroler MVC mam coś takiego:
public class MyController : Controller
{
[HttpPost]
public ActionResult New(MyModel myModel)
{
MyBusinessObject bo = GetBoFromModel(myModel);
IEnumerable<ValidationResult> result = bo.Validate();
if(result == null)
{
//Save bo, using my services layer
//return RedirectResult to success page
}
return View(myModel);
}
}
Biorąc mam Html.ValidationSummary();
.
Jak mogę przekazać IEnumerable<ValidationResult>
do ValidationSummary?
Próbowałem znaleźć odpowiedź przez google, ale wszystkie przykłady znalazłem opisuje, jak wyświetlić podsumowania sprawdzania poprawności za pomocą adnotacji danych w modelu, a nie w obiekcie Business.
Dzięki
MyBusinessObject nie może być modelem, ponieważ jest bardziej złożony niż model i wykonuje znacznie więcej weryfikacji. Nie chcę wyrzucać wyjątków z EF, a następnie przekierować do strony błędów, chcę tylko pokazać w widoku, które pola są nieprawidłowe w BusinessObject. –
Clarify - implementacja IValidatableObject musi być w viewmodel mianowicie w klasie MyModel. Przekazałeś firmie Viewmodel obawy (walidacja danych wejściowych użytkownika) - nie jest to poprawne. – vladimir77
@ vladimir77 Według http://msdn.microsoft.com/en-us/data/gg193959.aspx nie znalazłem niczego niepoprawnego, używając IValidatableObject z kodem-pierwszym. –