CodeGo.net>如何使用ViewModels提供动态数据集到单个视图

(第一次发布,并且对MVC相当陌生)我目前有一个MVC/C++#应用程序,用户在其中选择ID列表,然后选择报告类型(8个可能的不同报告,调用8个不同的数据库视图).我将所有这些参数传递给控制器​​.根据所选的报告类型,我要获取数据,将其发送回视图,然后以表格/表格格式显示数据.

我尝试通过ViewBag和ViewData发送数据,但是使用@foreach解析实际的列/数据时遇到了麻烦.这是我决定尝试使用ViewModels的时候.

//My ViewModel....
//I know that I am missing the {get;set;} code which is where I also
// need help with.  I need to pass the selected ID's to each database view and 
// perform additional query requests (i.e. Distinct, Order By). 
// Sample query:
// var dd = (from p in _db.Report1 select new { sId = p.ReportID, UserName = p.Submitted_By, 
//      Balance = p.TotalDebt}).Distinct();
// dd = dd.Where(w => chosenUserIDs.Contains(w.sID));
// dd.OrderBy(p => p.sId).ThenBy(p => p.UserName).ThenBy(p => p.Balance);

public class UserReportsViewModel
{
    public List<namespace.report1> Report1 = new List<namespace.report1>();
    public List<namespace.report2> Report2 = new List<namespace.report2>();
    public List<namespace.report3> Report3 = new List<namespace.report3>();
    ...
}

//My Controller
UserReportsViewModel UserReportVM = new UserReportsViewModel();
switch (reportType)
{
    case "REPORT1":
        //Pass the selected ID's and get the data back from Report1 db view
        // not quite sure how to do this.
        break;
    case "REPORT2":
        break;
    case "REPORT3":
        break;
    default:
        break;
}
return View(UserReportsVM);

我是否在正确的轨道上?我还遇到了有关部分视图的问题,并让视图调用/引用正确的部分视图(?).较旧的语言要完成此操作要简单得多,但我真的很喜欢MVC / .Net / C#.

至于我的数据库,我正在使用CodeFirst Entity框架.

解决方法:

我强烈建议您对每个报告都有视图,视图模型和操作.只需根据客户端中请求的报告来调用正确的端点.

或者,如果要使用一个端点(操作)执行此操作,请指定要返回的视图.如果未指定视图名称,它将基于操作名称返回一个视图,但是您可以指定要渲染的视图.

return View("ViewToRender", viewModel);

如果您想花哨的话,可以只使用一种视图.在视图模型中将布局对象与数据一起包括在内…这样,您就可以使用一个视图模型.该布局将是“列信息字段”的列表. Column1将具有This标头,此宽度等.它将绑定到GenericReportViewModel.Column1.

从那里,您只需要将数据投影到该通用视图模型中即可.

上一篇:谈谈你对MVVM开发模式和MVT的理解?


下一篇:提交时,ViewModel属性为null