Атрибут проверки в asp.net mvc - PullRequest
0 голосов
/ 03 апреля 2011

Моя модель примерно такая:

public class Line
{
    public int CatalogNumber {get; set;}
    public int TeamCode {get; set;}
}

У меня есть представление, которое получает каталожный номер и код команды, и я хочу проверить две вещи:

  1. есть такой каталожный номер в нашей базе данных
  2. Для данной команды есть такой каталожный номер

Я написал атрибут (производный от ValidationAttribute), который проверяет, существует ли такой номер по каталогу в нашей базе данных. Но это ничего не делает!

Может быть, такая проверка с атрибутом невозможна?

(я знаю, что могу реализовать IValidable и переопределить IsValid метод, но по своим собственным причинам я предпочитаю делать это с помощью атрибута).

Я должен сделать это без serverPost (ajax было бы хорошо)

Я буду очень признателен за хороший пример, чтобы сделать это.

p.s. (Мы используем mvc3)

1 Ответ

1 голос
/ 03 апреля 2011

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

public class Line
{
    [Remote("QueryCatalogNumberExists", "Home")]
    public int CatalogNumber { get; set; }
    public int TeamCode { get; set; }
}

Затем в вашем контроллере (я не проверял этот код, но он должен быть похож на):

public JsonResult QueryCatalogNumberExists(int catalogNumber)
{
    if (_repository.QueryCatalogNumberExists(catalogNumber))
    {
        return Json(true, JsonRequestBehavior.AllowGet);
    }
    return Json(false, JsonRequestBehavior.AllowGet); 
}

Я полагаю, что у вас также могут быть дополнительные поля, чтобы вы могли проверить, является ли номер каталога действительным для данного TeamCode (я думаю, что TeamCode должен быть обнуляемым, так как пользователь может не ввести его до ввода номера в своем каталоге текущая модель в качестве командного кода не требуется). Итак, ваша модель будет:

public class Line
{
    [Remote("QueryCatalogNumberExistsForTeamCode", "Home", AdditionalFields = "TeamCode")]
    public int CatalogNumber { get; set; }
    public int TeamCode { get; set; }
}

и код контроллера:

public JsonResult QueryCatalogNumberExistsForTeamCode(int catalogNumber, int? teamCode)
{
    if (_repository.QueryCatalogNumberExistsForTeamCode(catalogNumber, teamCode))
    {
        return Json(true, JsonRequestBehavior.AllowGet);
    }
    return Json(false, JsonRequestBehavior.AllowGet); 
}

Надеюсь, это направит вас в правильном направлении к решению.

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