验证[MetadatType(typeof(myClass)]中的多字段

时间:2012-08-16 23:11:41

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-2

我有一个带有[MetadataType(typeof(ThisEntityMetaData))]和[Bind(...)]注释的模型类。我需要验证post back组合属性值和路由参数(viewType)。 viewType不是实体类的属性。到目前为止,我只能在[post]动作中进行此验证。我想在实体类或ThisEntityMetaData类中进行此验证。我怎样才能做到这一点?感谢。

    [HttpPost]
    [ActionName("Create")]
    [AcceptParameter(Name = "Save", Value = "Save")]
    [ValidateInput(false)]
    public ActionResult Create(int id, thisViewModel newViewModel,
        string cancel, enumViewType viewType)
    {
        /* code omitted */

        switch(viewType)
        {
        case enumViewType.OutAndNoReturn:
        case enumViewType.OutAndReturn:
            if(!thisEntity.Source.HasValue || !thisEntity.Reason.HasValue)
                ViewData["Message"] = "Source, Reason are required.";
            break;
        case enumViewType.DirectOut:
        case enumViewType.IndirectOut:
            if ((!thisEntity.Source.HasValue || !thisEntity.Reason.HasValue ||
                 !thisEntity.Desired.HasValue))
            {
                thisEntity.ShowOutBlock = true;
                ViewData["Message"] = "Source, Reason, Desired are required.";
                return View(thisEntity);
            }
            break;
        }

        /* code omitted */
    }

1 个答案:

答案 0 :(得分:2)

  

viewType不是实体类的属性。

你可以使用真实的视图模型,而不是你命名为视图模型的东西,但实际上根本不是视图模型:

[HttpPost]
[ActionName("Create")]
[AcceptParameter(Name = "Save", Value = "Save")]
[ValidateInput(false)]
public ActionResult Create(thisViewModel newViewModel)
{
    ...
}

其中thisViewModel显然包含您需要的所有内容:

[MetadataType(typeof(ThisEntityMetaData))] 
public class thisViewModel
{
    public int Id { get; set; }
    public string Cancel { get; set; }
    public enumViewType ViewType { get; set; }

    ...
}

现在,您可以在ThisEntityMetaData内随意验证此视图模型中的任何内容。