子类的Mvc属性默认值

时间:2014-05-29 07:42:50

标签: c# asp.net-mvc asp.net-mvc-4

如何在模型中设置子类属性的默认值?

public class TestModel
{
    public ChildModel1 ChildModel1 { get; set; }
    public ChildModel2 ChildModel2 { get; set; }
}

public class ChildModel1
{
    public ChildModel1()
    {
        this.MyProperty = string.Empty; //this dont's work.
    }
    public string MyProperty { get; set; }
}

public class ChildModel2
{
    public int MyProperty { get; set; }
}

在控制者的行动中。

public ActionResult Index(TestModel model)
{
    var value = model.ChildModel1.MyProperty;  //this is null if value not entered.
}

目前,我正在使用这种做法不正确。

var value  = model.ChildModel1.MyProperty != null ? model.ChildModel1.MyProperty : "";

这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:2)

您的子模型构造函数初始化其字符串属性的值,但您实际上从未在主模型中实际初始化子模型实例。

除了子模型中的string.Empty分配外,您还需要在ChildModelX中实例化TestModel个实例:

public class TestModel
{
    public ChildModel1 ChildModel1 { get; set; }
    public ChildModel2 ChildModel2 { get; set; }

    public TestModel()
    {
        ChildModel1 = new ChildModel1();
        ChildModel1 = new ChildModel1();
    }
}

此外,如果表单未传递字符串值,则模型绑定器会将其初始化为null。尝试使用属性的支持字段,如果它为null,则返回string.Empty

private string _myProperty;

public string MyProperty
{
    get { return _myProperty != null ? _myProperty : string.Empty; }
    set { _myProperty = value; }
}