在这个带有查询报表的简单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
改变这个
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()
};
}