我的MVC公司中有一个控制器,它有以下两种方法:
public ActionResult _GetServiceStatus()
{
...
}
public ActionResult _GetEventLogErrors()
{
...
}
这些方法中的每一个都引用了我分别存储在模型,服务和事件中的不同类类型。这些可以在下面看到:
public class Service
{
public string Name { get; set; }
public string Status { get; set; }
}
public class Event
{
public string Source { get; set; }
public string EntryType { get; set; }
public string Message { get; set; }
public DateTime Date { get; set; }
}
我想要做的是在单个视图上显示这些方法的结果。我已经将此工作用于服务检查,结果显示正确,但我找不到如何添加事件结果。
我目前的观点如下:
@{
ViewBag.Title = "Monitoring";
}
@model IEnumerable<SystemMonitoringTool.Models.Monitoring.Service>
<div style="width:25%">
<span>
Services
</span>
<table id="services" style="border:solid; border-width:2px; width:100%">
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(model => item.Name)
</td>
<td>
@Html.DisplayFor(model => item.Status)
</td>
</tr>
}
</table>
</div>
有人可以帮我找到在同一视图上并排显示这些内容的方法吗?如果需要,将很乐意提供更多信息。
答案 0 :(得分:3)
两个选项:
使用子操作。而不是直接转到其中一个单独的控制器操作,而是添加如下操作:
public ActionResult Monitoring()
{
return View();
}
你会注意到这个动作做得不多。它只是渲染一个视图。然后,您需要将服务/事件的HTML移动到部分视图中。例如,_GetServiceStatus.cshtml
和_GetEventLogErrors.cshtml
,其中每个模型的模型将分别是Service
或Event
类型的集合。最后,在您的Monitoring.cshtml
视图中(基于上面的操作名称),您将添加:
@Html.Action("_GetServiceStatus")
@Html.Action("_GetEventLogErrors")
此视图不需要模型,因为它不能直接使用任何模型。
使用封装两个集合的视图模型:
public class MonitoringViewModel
{
public List<Service> Services { get; set; }
public List<Event> Events { get; set; }
}
然后你还需要一个统一的行动。但在这里,您将填充两个列表。基本上,您只需将现有的两个动作合并为一个:
public ActionResult Monitoring()
{
var model = new MonitoringViewModel
{
Services = /* code to retrieve services */,
Events = /* code to retrieve events */
}
return View(model);
}
然后,您可以单独遍历每个列表以构建HTML:
Monitoring.cshtml (同样,根据操作名称)
@model Namespace.To.MonitoringViewModel
...
<table id="services" style="border:solid; border-width:2px; width:100%">
@foreach (var item in Model.Services) { // notice the change here
<tr>
<td>
@Html.DisplayFor(model => item.Name)
</td>
<td>
@Html.DisplayFor(model => item.Status)
</td>
</tr>
}
</table>