Mvc属性为子类的默认值

本文关键字:默认值 子类 属性 Mvc | 更新日期: 2023-09-27 18:05:46

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

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 : "";

做这件事的最好方法是什么?

Mvc属性为子类的默认值

子模型构造器初始化它们的字符串属性的值,但是你从来没有在主模型中初始化子模型实例。

除了子模型中的string.Empty任务,您还需要在TestModel中实例化ChildModelX实例:

public class TestModel
{
    public ChildModel1 ChildModel1 { get; set; }
    public ChildModel2 ChildModel2 { get; set; }
    public TestModel()
    {
        ChildModel1 = new ChildModel1();
        ChildModel1 = new ChildModel1();
    }
}

同样,如果表单没有传递字符串值,模型绑定器将把它初始化为null。尝试使用属性的后备字段,并返回string.Empty,如果它是空的:

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