我有两个模型;一个持有显示在页面上的字段的值,另一个持有该页面所需的字段,具体取决于用户变量(将其视为一个组合框,对于每个变量,为页面呈现不同的字段)。我的问题是在单个视图/控制器中使用这两种模型的最有效和最易于管理的方法是什么?我试图给他们元组,但我得到,我需要创建一个无参数的构造函数错误。谢谢。如何在控制器/视图mvc中使用多个模型?
回答
正如tarzanbappa说,最好的方法之一将是为你增添每个视图模型附加字段。
为了不进入每个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向每个属性添加元数据,然后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");
}
你好詹姆斯,感谢你的回复。我想我或者错过了一些东西,或者我在描述这个问题时并不清楚。取决于用户的选择,需要哪些字段将被动态决定。例如,如果用户选择2轮,则属性摩托车名称将是必需的,而属性名称不会。如果用户选择4轮车名将是必需的,摩托车名不会。对不起,如果这不明确的描述... – CodeMagician 2014-10-29 10:27:29
@CodeMagician听起来像你需要一个自定义属性,使该依赖关系 - 请参阅[这个答案](http://stackoverflow.com/a/15975880/82586) – James 2014-10-29 12:29:08
- 1. 模型视图控制器(MVC)设计模式 - 如何将多个视图链接到多个模型?
- 2. 模型视图控制器中的模型视图控制器
- 3. ASP.NET MVC - 一个控制器和多个模型/视图
- 4. ASP.NET MVC:如何在一个视图中使用多个模型?
- 5. (模型/视图/控制器)MVC
- 6. 如何从视图传递模型控制器在MVC
- 7. Ember.JS - 如何在同一页面使用多个模型,控制器和视图?
- 8. 如何在多个视图控制器中使用一个xib?
- 9. 如何在codeigniter 3.1.4中使用多个控制器和模型?
- 10. 如何在CakePHP控制器中使用多个模型
- 11. 模型视图控制器
- 12. 在mvc中使用多个控制器
- 13. 如何使用模型/视图/控制器方法制作GUI?
- 14. Joomla模型视图控制器(MVC)如何工作?
- 15. 如何通过knockoutjs视图模型为MVC控制器
- 16. 如何在多个视图控制器中使用GameCenterManager
- 17. 我如何在BL中使用模型到控制器MVC
- 18. 通过模型在MVC视图中创建到控制器
- 19. Spring MVC使用单个控制器管理多个视图
- 20. 控制器使用多个模型?
- 21. 生成一个MVC模型在多个视图中使用
- 22. MVC 5在一个视图中使用多个模型异步
- 23. 在一个视图中使用多个模型.net Mvc
- 24. 在MVC中使用相同的控制器多视图3
- 25. 如何在视图路径中使用durandal mvc控制器?
- 26. Asp.Net Mvc - 如何在共享视图中使用“控制器”
- 27. 如何在MVC模式中引入视图和控制器?
- 28. 如何使用多个视图模型
- 29. MVC - 显示多个控制器结果在一个视图中
- 30. 在一个视图中的多个控制器(ruby on rails MVC)
你可以使用它由两个模型的字段的视图模型,你需要 – tarzanbappa 2014-10-29 09:25:14
谢谢你为你的快速反应tarzanbappa。问题是,第二个模型(将页面标记为页面所需的字段)是系统的新要求,实现此方法需要我们重新创建所有系统的视图模型。有其他解决方法吗?谢谢。 – CodeMagician 2014-10-29 09:53:43