以下是代码:
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?
答案 0 :(得分:1)
这不是你的代码在做什么 - 用默认值创建一个对象吗?
if (composeMessageViewModel == null)
{
composeMessageViewModel = new ComposeMessageViewModel();
}
答案 1 :(得分:0)
真正的答案:PEBKAC。我最初有一个Send动作,如果验证失败,我认为我必须由于某种原因重定向到Compose动作,而不是仅使用适当的ViewModel返回适当的视图。 Duuuuuuuh。 :)