【问题标题】:MVC Custom non model object validation?MVC自定义非模型对象验证?
【发布时间】:2013-04-02 15:45:38
【问题描述】:

我有一个特殊的场景,我需要验证一个不是我的模型的对象并从中获取所有 ValidationResult 对象。

所以我的控制器里面有这样的东西......

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();
    }
    ...
}

我正在验证的不是我的模型,而是基于我提供的 postdata 我需要验证集合以及验证失败的地方,我计划在集合中呈现失败的对象。

有什么想法可以得到我想要的 ValidationResult 对象吗?

【问题讨论】:

    标签: c# asp.net-mvc validation


    【解决方案1】:

    manual validation with data annotations 上的这篇文章可能会满足您的需求。

    【讨论】:

    • 完美......这是我的实现错误,为指针欢呼:)
    【解决方案2】:

    您可以将ValidationResults 存储在ViewBag 中,然后从那里渲染它们:

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

    现在,很多代码都做了很多假设,因为您没有提供很多信息。但无论哪种方式,将这些结果放入一个整体列表并将它们设置在ViewBag 中。然后,您可以在视图中利用 ViewBag

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

    【讨论】:

    • 我认为我的问题措辞不正确......验证方法不存在(尚)但是有问题的对象在其属性上有数据注释,我想获得验证结果来自:msdn.microsoft.com/en-GB/library/… ...我的问题是如何实现它。
    • 努力+1 ...解决方案很合理,这是我必须弄清楚的验证方法代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多