Как изменить модель и повторно проверить ее с помощью вычисленных значений в ASP.net Core / Razor? - PullRequest
0 голосов
/ 09 апреля 2019

В ASP.NET Core 2.2 Razor Pages я хочу провести повторную проверку модели после ее манипулирования, чтобы сделать ее согласованной. В частности, есть значения, которые я не хочу получать от пользователя или когда-либо отправлять пользователю, поэтому они не будут связаны с запросом, а будут добавлены при обработке запроса.

Проверка модели происходит до того, как я изменяю значения, и ModelState.IsValid() возвращает false.

Мне известно о TryValidateModel(object), но я не знаю, какой объект передать в него для повторной проверки всей модели для страницы Razor - поскольку я не использую MVC, в методе OnPost не передается объект модели. пользуюсь. Кажется, что ни в одной из документов не указано, что я должен передать, чтобы пройти повторную проверку, и я не смог найти никаких соответствующих документов для Core или Razor.

Мой код по сути:

[...]
public class IndexModel : PageModel
{
    [BindProperty]
    public NiceModelObject SomeModelObject { get; set; } // <=== object which needs to be manipulated
    [BindProperty]
    public AnotherModelObject ObjectThatIsOk { get; set; }
    [BindProperty]
    public FanciestModelObject AnotherObjectWhatIsJustPeachy { get; set; }

    public ActionResult OnPost()
    {
        // manipulate model
        SomeModelObject.Property = ValueIWantToSetItTo;
        SomeModelObject.Property2 = ValueIWantToSetItTo2;

        // Revalidate
        ModelState.Clear();
        TryValidateModel(/*What is the object that represents my entire model in Razor?*/); // <== don't know what to put here

        if (ModelState.IsValid())
        {
                // Do Stuff, redirect
        }
        // Do other stuff, present page with error
    }

    [...]
}

Редактировать

Добавлены дополнительные элементы в код для уточнения;

  • Мне известно о TryValidateModel(). Если я передам SomeModelObject в него, он не будет работать должным образом, после очистки он будет содержать только 1 или 2 значения, а SomeModelObject имеет как минимум 10 свойств.
  • Я использую Razor, и в отличие от обычного MVC, метод OnPost не имеет объекта, представляющего модель в целом (, о котором я знаю ), поэтому я не могу передать его в TryValidateModel().
...