【问题标题】:Optional model property with nested required properties具有嵌套必需属性的可选模型属性
【发布时间】:2012-09-18 15:44:36
【问题描述】:

使用如下代码:

public class FooModel {

    public BarModel Bar { get; set; }

}

public class BarModel {

    [Required]
    public string Baz { get; set; }

}

我想在一个表单中呈现FooModel.Bar,但它是可选的。但是,如果没有在 BarModel.Baz 的文本框中输入任何内容,表单将不会提交。有没有办法让FooModel 中的嵌套模型成为可选,而不必删除RequiredAttribute

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    有没有办法在 FooModel 中制作嵌套模型 可选而不必删除RequiredAttribute?

    我不知道。我建议您使用适合您的视图要求的视图模型(即具有可选的 Baz 属性):

    public class FooModel 
    {
        public BarViewModelModel Bar { get; set; }
    }
    
    public class BarViewModelModel 
    {
        public string Baz { get; set; }
    }
    

    这就是为什么您应该始终使用视图模型并且永远不要将您的域模型传递给视图的原因之一。如您所见,您的域模型不适合视图的特定要求。您可以在某些视图中有一些属性是必需的,而在其他视图中是可选的。

    【讨论】:

    • 它们都是视图模型,但我试图重用BarModel,它或多或少是一个通用模型。我想这意味着重用来自不同命名空间的视图模型通常也是一种不好的做法?
    • 经验法则如下:如果视图模型符合视图的要求,则重用它。不过,这似乎不是你的情况。
    猜你喜欢
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    相关资源
    最近更新 更多