MVC 2 Проблема аннотации данных - PullRequest
1 голос
/ 18 марта 2010

Схожу с ума сейчас. У меня есть решение MVC, которое я обновил с MVC 1 до 2. Все работает нормально .... кроме проверки!

Вот код:

В контроллере:

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Security.Principal;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using System.Web.UI;
using MF.Services.Authentication;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace MF.Controllers
{
     //basic viewmodel
     public class LogOnViewData
     {
     [Required]
     public string UserName { get; set; }

     [Required]
     public string Password { get; set; }
     }

    [HandleError]
public class AccountController : Controller
{
         [HttpPost]
         public ActionResult LogOn(LogOnViewData lvd, string returnUrl)
         {

         if (ModelState.IsValid)
         {
        //do stuff - IsValid is always true
         }
         }
    }
}

ModelState всегда действителен. Модель заполняется правильно, однако. Поэтому, если я оставлю имя пользователя и пароль пустыми и отправлю форму, состояние модели все еще будет в силе. Argh!

Дополнительная информация: использование структурной карты для IoD. Ранее, перед обновлением до MVC 2 использовалась библиотека аннотаций данных MS, так было в моем global.asax.cs: ModelBinders.Binders.DefaultBinder = new Microsoft.Web.Mvc.DataAnnotations.DataAnnotationsModelBinder ();

Удалите это сейчас.

Я уверен, что делаю что-то очень простое и неправильное. Если бы кто-то мог указать на это, это было бы чудесно. Приветствия

1 Ответ

0 голосов
/ 18 марта 2010

На полпути к разработке MVC2 они прошли путь от проверки ввода до проверки модели, которая во всех случаях должна полностью проверять ваш объект. Убедитесь, что вы используете последнюю версию (RTM).

Однако [Required] просто указывает, что атрибут не должен быть null. К сожалению, String.Empty - по умолчанию для строк - не null, поэтому проверка модели пройдет для пустых строк.

См. этот пост Брэда Уилсона для важных деталей .

В качестве решения вы можете использовать [RegularExpression("....")], чтобы наложить ограничения на минимальную длину строки и разрешенные символы.

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