使用.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;
我是否需要单独初始化我的第一个和第二个模型。请注意,我仍然没有使用我的"模式"在我看来呢。
答案 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();
}
}