【问题标题】:How to instantiate a class when its property members are not of primitive types?当一个类的属性成员不是原始类型时,如何实例化一个类?
【发布时间】:2010-04-18 08:34:29
【问题描述】:

1) 假设我有一个 MyDataInfo 类:

public class MyDataInfo
{
  public int MyDataInfoID { get; set; }
  public string Name { get; set; }
}

为了实现我所追求的功能,我创建了另一个类 (MyData),其属性成员是 MyDataInfo 类型。

2) 这是我的数据

public class MyData
{
  public MyDataInfo Prop1 { get; set; }
  public MyDataInfo Prop2 { get; set; }
}

3) 还有,这是我的操作方法

public ActionResult MyAction()
{
  MyData myObject = new MyData();
  return View(myObject);
}

4) 最后,这是在我的视图模板中(强类型从 MyData 继承

<%= Html.Encode (Model.Prop1.Name) %>
<%= Html.Encode (Model.Prop2.Name) %>

很遗憾,我收到错误消息“Object not set to an instance of an object。”

是我遗漏了什么,还是有不同的方法可以获得相同的结果?

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    您已经实例化了MyData,但没有实例化您试图在视图中访问的Prop1Prop2Prop1 为空,因此Model.Prop1.Name 将引发异常)。您将需要实例化这些属性:

    public ActionResult MyAction()
    {
        var myObject = new MyData 
        {
            Prop1 = new MyDataInfo(),
            Prop2 = new MyDataInfo()
        };
        return View(myObject);
    }
    

    这也可以在 MyData 的构造函数中完成:

    public class MyData
    {
        public void MyData()
        {
            Prop1 = new MyDataInfo();
            Prop2 = new MyDataInfo();
        }
    
        public MyDataInfo Prop1 { get; set; }
        public MyDataInfo Prop2 { get; set; }
    }
    

    【讨论】:

    • +1 - 好答案。当你和其他一些人没有粘在 SO 上时,我真的必须找到一个时间段,这样我才能得到一些答案。;-)
    • @Darin Dimitrov -- 你总是乐于助人。非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 2019-05-20
    • 1970-01-01
    相关资源
    最近更新 更多