如何在控制器/视图mvc中使用多个模型
本文关键字:模型 mvc 控制器 视图 | 更新日期: 2023-09-27 18:28:18
我有两个模型;一个保存页面上显示的字段的值,另一个根据用户变量保存该页面所需的字段。(把它想象成一个组合框,在每个变量上,为页面呈现不同的字段)。我的问题是,在一个视图/控制器中使用这两个模型的最有效和最易于管理的方式是什么?我试图将它们元组化,但我发现我需要创建一个无参数的构造函数错误。非常感谢。
为了不进入每个ViewModel并添加所需的所有属性,可以添加其他ViewModel的变量实例。
例如:(您的ViewModels)
public class MyViewModel()
{
public T PropertyOne { get; set; }
public T PropertyTwo { get; set; }
public MyOtherViewModel PropertyThree { get; set; }
}
public class MyOtherViewModel()
{
public T PropertyOneCheck { get; set; }
public T PropertyTwoCheck { get; set; }
}
然后在您的DataModel调用中,设置您的变量。例如:(LINQ)
...
PropertyThree = (from r in context.Table
where conditionIsMet
select new MyOtherViewModel
{
PropertyOneCheck = r.PropertyOneCheck,
PropertyTwoCheck = r.PropertyTwoCheck
}).FirstOrDefault();
...
在您的视图中,您可以按如下方式切换字段的可见性:
@if(Model.PropertyThree.PropertyOneCheck)
{
//Show Field
}else
{
//Hide Field
}
最好的方法是有一个专门为UI设计的视图模型,听起来,它将是您当前两个模型的混合。
您可以使用DataAnnotations向每个属性添加元数据,然后验证您的模型,例如
public class ViewModel
{
[Required]
public string PropertyOne { get; set; }
[Required]
public string PropertyTwo { get; set; }
}
...
var model = new ViewModel();
var results = new List<ValidationResult>();
if (!Validator.TryValidateObject(model, new ValidationContext(model), results)) {
Console.WriteLine("Model is not valid:");
foreach (var r in results) {
Console.WriteLine(r.ErrorMessage);
}
} else {
Console.WriteLine("Model is valid");
}
实例