War
War

Reputation: 8628

MVC Custom non model object validation?

I have a peculiar scenario in which i need to validate an object that isn't my model and get all the ValidationResult objects from it.

So my controller has something like this in it ...

public virtual ActionResult(MyObject postData)
{
    ICollection someCollection = DoSomething(postData);

    foreach(Thing t in someCollection)
    {
         // validate t and get any ValidationResult objects
         // put the validation results in the object property.
         // this call isn't real by the way
         t.ValidationResults = t.Validate();
    }
    ...
}

Its not my model i'm validating but based on the postdata i'm given i need to validate the collection and where the validation fails I plan to render the failed objects in the collection.

any ideas how I can the ValidationResult objects I want?

Upvotes: 1

Views: 414

Answers (2)

Rob West
Rob West

Reputation: 5241

This article on manual validation with data annotations might give you what you need.

Upvotes: 1

Mike Perrenoud
Mike Perrenoud

Reputation: 67898

You could store the ValidationResults in the ViewBag and then render them from there:

var list = new List<ValidationResult>();
foreach (Thing t in someCollection)
{
    t.ValidationResults = t.Validate();
    list.AddRange(t.ValidationResults);
}
ViewBag.ValidationResults = list;

now, a lot of that code makes a lot of assumptions because you aren't providing a lot of information. But either which way, get those results into an overall list and set them in the ViewBag. You can then leverage the ViewBag in the view:

@foreach (ValidationResult r in ViewBag.ValidationResults)
{
   <!-- render some HTML here  with the r variable -->
}

Upvotes: 1

Related Questions