在这个带有查询报表的简单MVC应用程序中,我遗漏了什么?

本文关键字:什么 应用程序 MVC 查询 简单 报表 | 更新日期: 2023-09-27 18:19:10

这就是我面临的情况:

我确实有3个控制器如下:一)MetricControllerb) CategoryControllerc) NavController

在我继续之前,我最好分享一下我在视图(HTML页面)上有一个简单的布局,它包含一个列(在左边)表示类别,在页面的右边我必须显示一组信息。该信息必须根据左列中选择的类别(报告类型)进行更改。

MetricController负责从表(Metrics表)中检索一些信息,它是:

EDIT **** STARTS

   public class Metric  {   //just a class for IIS log
        //[Key]
        public int Id { get; set; }
        public string date { get; set; }
        public string time { get; set; }
        public string c_ip { get; set; }
        public string cs_username { get; set; }
        public string s_sitename { get; set; }
        public string s_computername { get; set; }
        public string s_ip { get; set; }
        AND MORE...
    }

EDIT **** ENDS

 public class MetricController : Controller {
        private IMetricRepository repository;
        public MetricController(IMetricRepository metricRepository) {
            this.repository = metricRepository;
        }
        public ViewResult List() {
            MetricsListViewModel model = new MetricsListViewModel {
                Metrics = repository.Metrics
                .OrderBy(p => p.Id)   //just few columns for now
            };
            return View(model);
        }
    }

NavController负责在左列中导航和显示类别(从其表中检索),如下所示:

public class NavController : Controller  {

        private ICategoryRepository repository;
        public NavController(ICategoryRepository repo) {
            repository = repo;
        }
        public PartialViewResult Menu() {
            IEnumerable<string> categories = repository.Categories
                                                .Where(x => x.Visible == "1" /*|| x.Visible == "0"*/)
                                                .Select(x => x.CategoryName)
                                                .Distinct()
                                                .OrderBy(x => x);
            return PartialView(categories);
        }

现在,我有了一个HTML页面,它展示了一个填充了类别(或者我们说在左列中的报告名称)的左列,并且需要在用户每次单击一个报告/类别名称时设置并运行查询。

我知道的一件事(如果我错了,请随时纠正我)是,我必须在CategoryController上工作,但使用下面的代码最终会得到类型转换错误:

编辑:这是MetricsListViewModel的定义:
public class MetricsListViewModel  {
    public IEnumerable<Metric> Metrics { get; set; }
    public PagingInfo PagingInfo { get; set; }
    public string CurrentCategory { get; set; }
}
public class CategoryController : Controller   {
        private IMetricRepository repository;
        public CategoryController(IMetricRepository metricRepository) {
            repository = metricRepository;
        }
        public ViewResult List(string category)
        {
            MetricsListViewModel viewModel = new MetricsListViewModel {
                Metrics = repository.Metrics
                    .Select(p => p.cs_username)  <<<<<<<<  cannot convert 
            };
        }
    }

错误是:

不能隐式转换类型'System.Linq。到System.Collections.Generic.IEnumerable。存在显式转换(您是否缺少强制类型转换?)

这是我的第一个MVC应用程序,我觉得我错过了一些东西。我可以使用report的常量列表并使用

@Html.ActionLink(GenerateReport1, action ,Controllername)
@Html.ActionLink(GenerateReport2, action ,Controllername)
@Html.ActionLink(GenerateReport3, action,Controllername)

,但需要从表中加载报表名称。如有任何帮助,不胜感激。

问候,Amit

在这个带有查询报表的简单MVC应用程序中,我遗漏了什么?

改变这个

 MetricsListViewModel viewModel = new MetricsListViewModel {
            Metrics = repository.Metrics
                .Select(p => p.cs_username)

 var viewModel = new MetricsListViewModel {
            Metrics = repository.Metrics
                .Select(p => p.cs_username).ToList();

我不知道你的MetricsListViewModel .

感谢您为MetricsListViewModel添加了def我想你要找的是这样的东西

public ViewResult List(string category)
{
    var viewModel = new MetricsListViewModel 
    {
        Metrics = repository.Metrics.ToList()
    };
}