如何在模型中设置子类属性的默认值?
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 : "";
这样做的最佳方式是什么?
答案 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; }
}