我有两个型号;一个保存页面上显示的字段的值,另一个保存该页面所需的字段,具体取决于用户变量。(将其视为一个组合框,对于每个变量,为页面呈现不同的字段)。我的问题是在单个视图/控制器中使用这两个模型的最有效和可管理的方法是什么?我试图将它们编组,但我得到了我需要创建一个无参数的构造函数错误。谢谢。
答案 0 :(得分:0)
最好的方法是拥有专为UI设计的 view 模型,通过声音,它将是您当前两个模型的混合体。
您可以使用DataAnnotations向每个媒体添加元数据,然后Validate您的模型。
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");
}
答案 1 :(得分:0)
正如tarzanbappa所说,最好的方法之一就是在每个ViewModel中添加额外的字段。
为了不进入每个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
}