Изменение базовой модели, которую проверяет ModelState - PullRequest
0 голосов
/ 16 декабря 2010

Я выдвигаю большую модель для представления, но хочу обновить только те части представления, которые имеют несколько частичных представлений для Списка.

По сути, у меня есть код для обновления исходной модели, но я хочу, чтобы 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);
    //    }

}

Я хочу запустить проверку для " updated " not " sectionUpdates"выше.

У меня есть штраф за обновление исходной информации, но мне нужно запустить проверку на соответствие оригиналу, а не sectionUpdates .., как если бы уже было a.Prop1, нет поля ввода в представлении для сообщения.Он относительно большой и не хочет публиковать тонну скрытых полей на сервере без необходимости.

1 Ответ

3 голосов
/ 16 декабря 2010

Используйте это для проверки любой модели:

var isOriginalModelValid = this.TryValidateModel(updated);

Тем не менее, могут существовать некоторые фундаментальные проблемы с дизайном, которые у вас есть.

...