1

I have a model class with [MetadataType(typeof(ThisEntityMetaData))] and [Bind(...)] annotations. I need to validate post back combined property values and a route parameter(viewType). The viewType is not a property of the entity class. So far I can only do this validation in [post] of the action. I'd like to do this validation in the entity class or the ThisEntityMetaData class. How can I do that? Thanks.

    [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 */
    }
4

1 に答える 1

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で、このビューモデルで必要なものを自由に検証してください。

于 2012-08-17T05:11:09.497 に答える