Параметр для действия всегда не нулевой - PullRequest
1 голос
/ 28 января 2011

Вот код:

public class MessagesController
{
    public virtual ActionResult Compose(ComposeMessageViewModel composeMessageViewModel = null)
    {
        if (composeMessageViewModel == null)
        {
            // never executed as composeMessageViewModel is always not null
            composeMessageViewModel = new ComposeMessageViewModel();
        }

        return View(composeMessageViewModel);
    }
}

И определение ComposeMessageViewModel

public class ComposeMessageViewModel
{
    [DisplayName("To:")]
    [NotEmpty] //custom ValidationAttribute
    public IEnumerable<MessageRecipientViewModel> Recipients { get; set; }
    [DisplayName("Subject:")]
    public string Subject { get; set; }
    public string Body { get; set; }
}

Проблема заключается в том, что при переходе к /Messages/Compose (без строки запроса, без параметров формы)Я ожидаю, что параметр будет нулевым, чтобы не возникало ошибок проверки, но это фактический объект со всеми его полями / свойствами, установленными на значения по умолчанию.

Это нежелательно, так как вызывает проверку длямодель, которую нужно выполнить, когда это не должно быть, поскольку ничего еще не было введено!

Для этого класса не установлено пользовательского ModelBinder, и ModelBinder по умолчанию не был изменен.

WTF?

Ответы [ 2 ]

1 голос
/ 28 января 2011

Разве это не то, что делает ваш код - создает объект со значениями по умолчанию?

   if (composeMessageViewModel == null)
   {
        composeMessageViewModel = new ComposeMessageViewModel();
   }
0 голосов
/ 29 января 2011

Верный ответ: PEBKAC.Первоначально у меня было действие Отправить, которое, если проверка не удалась, я подумал, что по какой-то причине мне придется перенаправить на действие «Создать» вместо того, чтобы просто возвращать соответствующее представление с соответствующей ViewModel.Duuuuuuuh.:)

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