Проблема проверки модели в ASP.NEt MVC 2 RC 2 - PullRequest
0 голосов
/ 16 февраля 2010

У меня возникла следующая проблема после обновления.

У меня есть Модель с проверкой на уровне класса плюс проверка на уровне свойств. После обновления до MVC 2 RC 2. Проверка модели не выполняется при привязке модели. Что я на самом деле понимаю, этот новый механизм пытается проверить модель, когда вы впервые запрашиваете ее или говорите по GET, и она получает исключение нулевого объекта во время вызова привязки tryvalidatemodel Model.

Моя модель похожа на это ниже

[Serializable]    
[MetadataType(typeof(InterestClaimMetaData))] //metadata with all properties level validation

//these validations fails when you request a page.
[DateComparison("DateA", "DateB", eDateComparitor.GreaterThan, 
    ErrorMessage = "Date A must be greater than B Date")]

[MutuallyExclusive("A", "B", ErrorMessage = "Please select either A or B field")]   

public class IE {
    public int ID { get; set; }
    public byte[] Updated { get; set; }
}

DataComparison и MutuallyExclusive переопределяют функцию validate isvalid и проверяют валидацию, но при попытке выполнить валидацию по первому запросу не удается. не знаю, как остановить это, так как это не должно проверять модель по запросу get; просто прикрепите свойства.

Только модели без этих проверок на уровне класса.

Пожалуйста, сообщите. Спасибо

1 Ответ

0 голосов
/ 16 февраля 2010

Разделите ваш метод действия в контроллере на два метода действия. Отметьте один как GET, а другой как POST. Затем примените проверку только в методе POST. Так, например, если у вас есть метод Create, который выглядит примерно так ...

public ActionResult Create(YourModel yourModel)
{
    // Some code in here to validate stuff
    // Some code in here to do stuff
    return RedirectToAction("Index");
}

Разделите это на два метода, как этот ...

[HttpGet]
public ActionResult Create()
{
    return View();
} 

[HttpPost]
public ActionResult Create(YourModel yourModel)
{
    try
    {
        // Some code in here to validate stuff
        // Some code in here to do stuff
        return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...