if (ModelState.IsValid) не работает с FormsCollection. Что использовать вместо этого? - PullRequest
1 голос
/ 10 июня 2011

Чтобы проверить действие HttpPost, привязанное к конкретному типу, я могу использовать ModelState.IsValid

    public ActionResult Create(MyModelType myModel)
    {
        if(ModelState.IsValid)
        {
            // Do some stuff
            return RedirectToAction("Details", 0);
        }
        else
        {
            return View();
        }
    }

Это очевидно не будет работать с FormCollection, потому что нет модели для проверки

    public ActionResult Create(FormCollection collection)
    {
        if(ModelState.IsValid) // Never invalid
        {

Что следует использовать вместо ModelState.IsValid, когда действие принимает FormCollection?

P.S. Тысяча извинений, я знаю это тупой вопрос

1 Ответ

2 голосов
/ 10 июня 2011

Это нормально. Вам нужно UpdateModel:

public ActionResult Create()
{
    var model = new MyModelType();
    UpdateModel(model);
    if(ModelState.IsValid) 
    {
        ...
    }
    ...
}

В первом случае вызывается механизм связывания модели по умолчанию, поскольку он должен связывать вашу модель из запроса. Это связующее устройство модели по умолчанию будет затем проверять ваши правила аннотации данных. Во втором случае вы ничего не делаете. Действие контроллера не знает вашей модели и аннотаций данных для проверки. Поэтому состояние модели всегда будет действительным, поскольку нет ничего, что сделало бы его недействительным.

Как говорится, вы всегда должны использовать первый подход. FormCollection просто бесполезно. Даже если вы воспользуетесь вторым подходом (который я бы совершенно не рекомендовал), как вы видите, вам не нужна коллекция FormCollection.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...