更改ModelState正在验证的基础模型

时间:2010-12-16 18:24:11

标签: c# asp.net-mvc-2 asp.net-mvc-2-validation

我正在推出一个更大的模型到一个视图,但是想要只更新该视图的一部分,它有一个List的多个部分视图。

基本上,我有更新原始模型的代码,但希望ModelState.IsValid对更新的原始模型进行操作,而不是发布的部分模型。

[HttpPost]
public virtual ActionResult MyAction(MyFullModel sectionUpdates)
{
    var updated = Session['original'] as MyFullModel;
    for (var i=0; i<updated.Section.Count; i++)
    {
        var a = original.Section[i] as SubModel;
        var b = sectionUpdates.Section[i] as SubModel;

        if (String.IsNullOrWhiteSpace(a.Prop1))
        {
            a.Prop1 = b.Prop1
        }
        if (String.IsNullOrWhiteSpace(a.Prop2))
        {
            a.Prop2 = b.Prop2
        }
        ...
    }

    // ??? How do I run ModelState.IsValid against original here ???

    // this doesn't seem to work, the only the posted values are checked...
    //    ViewData.Model = model;
    //    ModelState.Clear();
    //    if (!TryUpdateModel(model))
    //    {
    //        //model state is invalid
    //        return View(secureFlightUpdates);
    //    }

}

我想对上面的“已更新”而不是“ sectionUpdates ”进行验证。

我原始信息更新正常,但是需要对原始信息运行验证,而不是sectionUpdates ..好像已经有一个a.Prop1,视图中的帖子没有输入字段。它相对较大,并且不想在没有必要的情况下将大量隐藏字段发回服务器。

1 个答案:

答案 0 :(得分:3)

使用此功能验证任何模型:

var isOriginalModelValid = this.TryValidateModel(updated);

但是你可能仍然存在一些基本的设计问题。