首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >检查模型在控制器外部是否有效

检查模型在控制器外部是否有效
EN

Stack Overflow用户
提问于 2012-06-22 12:53:02
回答 2查看 11.9K关注 0票数 21

我有一个helper类,它被传递了一个值数组,然后从我的Model中传递给一个新类。如何验证给这个类的所有值都是有效的?换句话说,如何在非控制器类中使用ModelState的功能。

从控制器执行以下操作:

代码语言:javascript
复制
public ActionResult PassData()
{
    Customer customer = new Customer();
    string[] data = Monkey.RetrieveData();
    bool isvalid = ModelHelper.CreateCustomer(data, out customer);
}

从帮助器:

代码语言:javascript
复制
public bool CreateCustomer(string[] data)
{
    Customter outCustomer = new Customer();
    //put the data in the outCustomer var
    //??? Check that it's valid

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-22 14:14:58

您可以在ASP.NET上下文之外使用数据注释验证:

代码语言:javascript
复制
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);
}
票数 39
EN

Stack Overflow用户

发布于 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的模型绑定创建您的客户并应用所需的字段值(请参阅上面的链接该模式是如何工作的)。然后,将客户实例提供给后端,在后端可以根据键入的客户实例进行额外的验证检查(例如,手动地或使用数据注释)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11150375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档