创建多个模型时的MVC问题

时间:2018-03-21 13:46:59

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

使用.net Core,MVC,C#

我创建了一个包含2个独立模型的模型。代码如下:

public abstract class ViewModelBase
{
    public string Environment { get; set; }
}

public class CombinedViewModel : ViewModelBase
{
    public FirstViewModel FirstViewModel { get;set;}
    public SecondViewModel SecondViewModel { get; set; }
}

public class FirstViewModel : ViewModelBase
{
    public string FirstName{ get;set;}
    public string LastName{ get; set; }
}

public class SecondViewModel : ViewModelBase
{
    public string Mode { get;set;}  
}

这是我的MVC控制器:

public IActionResult Index(string environment, string mode)
{
    var model = new CombinedViewModel ();
    model.Environment = environment;  
    model.SecondViewModel.Mode = mode;
    return View(model);
}

我搜索过这是初始化多个模型的方法。不确定我在这里做错了什么,但我得到以下错误:

  

处理请求时发生未处理的异常。

     

NullReferenceException:未将对象引用设置为对象的实例。

     

model.SecondViewModel.Mode = mode;

我是否需要单独初始化我的第一个和第二个模型。请注意,我仍然没有使用我的"模式"在我看来呢。

2 个答案:

答案 0 :(得分:2)

是的,你需要分别初始化它们#34;#34;。否则model.SecondViewModel为null,当您尝试访问其中一个属性时,您将获得异常。

您可以在CombinedViewModel构造函数中初始化它们,如下所示:

public CombinedViewModel () // Could request parameters like default Mode / FirstName / LastName
{
    this.FirstViewModel  = new FirstViewModel();
    this.SecondViewModel = new SecondViewModel();
}

答案 1 :(得分:1)

是的,您必须先初始化子模型,然后才能访问它们。您可以在控制器的操作方法中明确地执行此操作:

public IActionResult Index(string environment, string mode)
{
    var model = new CombinedViewModel ();
    model.Environment = environment;
    model.SecondViewModel = new SecondViewModel();
    model.SecondViewModel.Mode = mode;
    return View(model);
}

另一种方法是在CombinedViewModel类的构造函数中设置一些默认值:

public class CombinedViewModel : ViewModelBase
{
    public FirstViewModel FirstViewModel { get;set;}
    public SecondViewModel SecondViewModel { get; set; }

    public CombinedViewModel()
    {
        this.FirstViewModel = new FirstViewModel();
        this.SecondViewModel = new SecondViewModel();
    }
}