ASP.NET MVC中如何用ViewModel展示两个无关联模型的数据
用ViewModel在ASP.NET MVC视图中展示两个无关联模型的数据
1. 创建ViewModel类
ViewModel的作用是将多个无关联的模型包装在一起,作为视图的统一数据载体。根据你的两个模型,定义如下ViewModel:
// 包装两个模型的ViewModel public class ResumeViewModel { public Experience Experience { get; set; } public Education Education { get; set; } } // 你的原始Experience模型 public class Experience { public int ExperienceId { get; set; } public string ExperienceTitle { get; set; } public string ExperienceText { get; set; } } // 你的原始Education模型(注意字段EdicationText可能是拼写错误,建议修正为EducationText) public class Education { public int EducationId { get; set; } public string EducationTitle { get; set; } public string EdicationText { get; set; } }
2. 在控制器中填充ViewModel并传递给视图
在控制器的Action方法中,分别从数据库获取两个模型的数据,填充到ViewModel后传给视图:
public class HomeController : Controller { // 假设你使用Entity Framework或其他数据访问方式 private readonly YourDbContext db = new YourDbContext(); public ActionResult Index() { // 获取单条工作经历数据(根据业务需求调整,比如获取全部则用ToList()) var experience = db.Experiences.FirstOrDefault(); // 获取单条教育经历数据 var education = db.Educations.FirstOrDefault(); // 实例化并填充ViewModel var viewModel = new ResumeViewModel { Experience = experience, Education = education }; return View(viewModel); } }
3. 创建强类型视图展示数据
创建对应Action的视图,并指定ViewModel为强类型,通过Model访问两个模型的字段:
@model ResumeViewModel <div class="experience-section"> <h3>工作经历</h3> @if (Model.Experience != null) { <p>ID: @Model.Experience.ExperienceId</p> <h4>@Model.Experience.ExperienceTitle</h4> <p>@Model.Experience.ExperienceText</p> } else { <p>暂无工作经历数据</p> } </div> <div class="education-section"> <h3>教育经历</h3> @if (Model.Education != null) { <p>ID: @Model.Education.EducationId</p> <h4>@Model.Education.EducationTitle</h4> <p>@Model.Education.EdicationText</p> } else { <p>暂无教育经历数据</p> } </div>
扩展:展示多条数据
如果需要展示多条工作或教育经历,只需将ViewModel中的属性改为集合类型:
public class ResumeViewModel { public List<Experience> Experiences { get; set; } public List<Education> Educations { get; set; } }
控制器中获取集合数据:
var experiences = db.Experiences.ToList(); var educations = db.Educations.ToList(); var viewModel = new ResumeViewModel { Experiences = experiences, Educations = educations };
视图中用foreach遍历展示:
@foreach (var exp in Model.Experiences) { <div> <h4>@exp.ExperienceTitle</h4> <p>@exp.ExperienceText</p> </div> }
内容的提问来源于stack exchange,提问作者Unknown
相关产品推荐
相关产品推荐

