c# - que - Compruebe si el modelo es válido fuera del controlador
que son los helpers en mvc (2)
No utilice ModelState fuera de un controlador. No puedo ver lo que hace Monkey.RetrieveData (), pero en general no pasaría a) datos simples de HTTPRequest yb) datos sin tipo, como matrices de cadenas, a su backend. Deje que el marco web verifique los datos entrantes y las clases tipeadas de instancia para usar en el backend. Tenga en cuenta que la comprobación de la inyección HTML (scripts XSS, etc.) debe realizarse manualmente si aplica sus datos manualmente.
En lugar de eso, use carpetas de modelos, etc. y pase datos escritos (por ejemplo, instancias de clase de cliente) a su backend. Hay una publicación más antigua de Scott Gu que muestra esto para MVC1: http://weblogs.asp.net/scottgu/archive/2008/09/02/asp-net-mvc-preview-5-and-form-posting-scenarios.aspx
En su ejemplo, permita que el enlace de modelo de MVC cree a su cliente y aplique los valores de campo requeridos (vea el enlace anterior sobre cómo funciona ese patrón). A continuación, asigna su instancia de Cliente a su backend donde se pueden realizar comprobaciones de validación adicionales en función de su instancia de Cliente escrita (por ejemplo, manualmente o con anotaciones de datos).
Tengo una clase auxiliar que se pasa una matriz de valores que luego se pasa a una nueva clase de mi modelo. ¿Cómo verifico que todos los valores dados a esta clase son válidos? En otras palabras, ¿cómo uso la funcionalidad de ModelState dentro de una clase sin controlador?
Desde el controlador:
public ActionResult PassData()
{
Customer customer = new Customer();
string[] data = Monkey.RetrieveData();
bool isvalid = ModelHelper.CreateCustomer(data, out customer);
}
Del ayudante:
public bool CreateCustomer(string[] data)
{
Customter outCustomer = new Customer();
//put the data in the outCustomer var
//??? Check that it''s valid
}
Podría usar la validación de anotaciones de datos fuera de un contexto ASP.NET:
public bool CreateCustomer(string[] data, out Customer customer)
{
customer = new Customer();
// put the data in the customer var
var context = new ValidationContext(customer, serviceProvider: null, items: null);
var results = new List<ValidationResult>();
return Validator.TryValidateObject(customer, context, results, true);
}