Проверьте форму MVC 2, используя аннотации данных и Linq-to-SQL, прежде чем сработает связыватель модели (с DateTime) - PullRequest
0 голосов
/ 18 февраля 2010

Я использую linq to SQL и MVC2 с аннотациями данных, и у меня возникают некоторые проблемы при проверке некоторых типов.

Например:

[DisplayName("Geplande sessies")]
[PositiefGeheelGetal(ErrorMessage = "Ongeldige ingave. Positief geheel getal verwacht")]
public string Proj_GeplandeSessies { get; set; }

Это целое число, и я проверяю, чтобы получить положительное число из формы.

public class PositiefGeheelGetalAttribute : RegularExpressionAttribute {
    public PositiefGeheelGetalAttribute() : base(@"\d{1,7}") { }
}

Теперь проблема в том, что когда я пишу текст на входе, я не вижу ЭТОЙ ошибки, но получаю сообщение об ошибке из связывателя модели, говорящее: «Значение« Завтра »недопустимо для сессий Гепланда».

Код в контроллере:

[HttpPost]
public ActionResult Create(Projecten p)
{
    if (ModelState.IsValid)
    {
        _db.Projectens.InsertOnSubmit(p);
        _db.SubmitChanges();

        return RedirectToAction("Index");
    }
    else
    {
        SelectList s = new SelectList(_db.Verbonds, "Verb_ID", "Verb_Naam");
        ViewData["Verbonden"] = s;
    }

    return View();
}

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

У меня та же проблема с DateTime, которую я хочу, чтобы пользователи писали в конкретной форме 'dd / MM / yyyy', и у меня есть регулярное выражение для этого. но опять же, к тому времени, когда аннотации данных выполняют свою работу, я получаю только объект DateTime, а не исходную строку. Поэтому, если входные данные не являются датой, регулярное выражение даже не запускается, потому что аннотации данных просто обнуляются, потому что механизм связывания модели не может перейти в DateTime.

У кого-нибудь есть идеи, как заставить это работать?

1 Ответ

2 голосов
/ 18 февраля 2010

Два варианта:

(1) Вы можете создать модель представления Projecten, где все поля являются строками.Таким образом, viewModel всегда будет создаваться из опубликованных данных, и ваша проверка аннотаций данных всегда будет оцениваться.Очевидно, что вы затем сопоставили бы viewModel с вашими правильно типизированными бизнес-объектами, возможно, используя AutoMapper.

(2) Вы можете создать подкласс связывателя модели.

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