操作参数始终不为空

时间:2011-01-28 19:32:45

标签: c# asp.net-mvc asp.net-mvc-2 .net-3.5

以下是代码:

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(没有查询字符串,没有表单参数)时,我希望参数为null,这样就不会发生验证错误,但它是一个实际的对象其字段/属性设置为默认值。

这是不可取的,因为它会导致模型的验证被执行,而不应该没有输入任何内容!

此类没有自定义的ModelBinder设置,默认的ModelBinder尚未更改。

WTF?

2 个答案:

答案 0 :(得分:1)

这不是你的代码在做什么 - 用默认值创建一个对象吗?

   if (composeMessageViewModel == null)
   {
        composeMessageViewModel = new ComposeMessageViewModel();
   }

答案 1 :(得分:0)

真正的答案:PEBKAC。我最初有一个Send动作,如果验证失败,我认为我必须由于某种原因重定向到Compose动作,而不是仅使用适当的ViewModel返回适当的视图。 Duuuuuuuh。 :)