我有一个helper类,它被传递了一个值数组,然后从我的Model中传递给一个新类。如何验证给这个类的所有值都是有效的?换句话说,如何在非控制器类中使用ModelState的功能。
从控制器执行以下操作:
public ActionResult PassData()
{
Customer customer = new Customer();
string[] data = Monkey.RetrieveData();
bool isvalid = ModelHelper.CreateCustomer(data, out customer);
}
从帮助器:
public bool CreateCustomer(string[] data)
{
Customter outCustomer = new Customer();
//put the data in the outCustomer var
//??? Check that it's valid
}
发布于 2012-06-22 14:14:58
您可以在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);
}
发布于 2012-06-22 14:21:18
不要在控制器之外使用ModelState。我不知道Monkey.RetrieveData()能做什么,但一般来说,我不会把a)来自HTTPRequest的普通数据和b)像字符串数组这样的非类型化数据传递给你的后端。让web框架检查传入的数据,并实例化要在后端使用的类型化类。请注意,检查HTML注入(XSS脚本等)如果您手动应用数据,则必须手动完成。
取而代之的是使用模型绑定器等,并传递类型数据(例如,Customer类实例)复制到您的后端。Scott Gu在MVC1上发布了一个更老的帖子:http://weblogs.asp.net/scottgu/archive/2008/09/02/asp-net-mvc-preview-5-and-form-posting-scenarios.aspx
在您的示例中,让MVC的模型绑定创建您的客户并应用所需的字段值(请参阅上面的链接该模式是如何工作的)。然后,将客户实例提供给后端,在后端可以根据键入的客户实例进行额外的验证检查(例如,手动地或使用数据注释)。
https://stackoverflow.com/questions/11150375
复制相似问题