【发布时间】:2017-09-15 23:28:48
【问题描述】:
我正在尝试将模型中的列表和视图中的字符串传递给我的控制器。我成功地从 Home 控制器获取数据到 Dashboard.cshtml,但是当我尝试将列表从模型传递到 DetailController 时,列表没有通过,但字符串 TicketGroupName 可以。对我做错了什么有什么想法吗?
仪表板.cshtml
@model testlogin.Models.DashboardViewModel
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>@Model.AreaName</h2>
<table id="dashboardContainer" class="table">
<tr class="data-row-1">
<td class="tile text-center">
<a href="http://company.html"><img style="height: 125px" id="Image1" src="https://logo.jpg" /></a>
</td>
<td class="tile btn text-center">
<a href="@Url.Action("ShowTickets", "Detail", new { TicketList = Model.OpenNow, TicketGroupName = "Open Now" })">
<div>
<div class="row tile-head">
<h4>Open Now</h4>
</div>
<div class="row">
<h1><strong>@Model.OpenNow.Count</strong></h1>
</div>
</div>
</a>
</td>
</tr>
</table>
HomeController.cs
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Dashboard(string AreaName)
{
full_area_name = "Test Area";
var dash = GetDashData(board_number); //Not including it here, but this method works
dash.AreaName = full_area_name;
return View(viewName: "Dashboard", model: dash);
}
}
DashboardViewModel.cs
public class DashboardViewModel
{
public List<TicketModel> OpenNow { get; set; }
}
DetailController.cs
public class DetailController : Controller
{
public ActionResult ShowTickets(List<TicketModel> TicketList, string TicketGroupName)
{
TicketViewModel vm = new TicketViewModel()
{
GroupName = TicketGroupName,
Tickets = TicketList
};
return View(vm);
}
}
TicketViewModel.cs
public class TicketViewModel
{
public string GroupName { get; set; }
public IEnumerable<TicketModel> Tickets { get; set; }
}
ShowTickets.cshtml
@model testlogin.Models.TicketViewModel
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="container">
<div>
<h1>@Model.GroupName</h1>
</div>
<table class="table table-striped table-bordered table-hover">
<tr>
<th>@Html.LabelFor(model => model.Tickets.FirstOrDefault().TicketNbr)</th>
<th>@Html.LabelFor(model => model.Tickets.FirstOrDefault().Company_Name)</th>
<th>@Html.LabelFor(model => model.Tickets.FirstOrDefault().Priority_Description)</th>
<th>@Html.LabelFor(model => model.Tickets.FirstOrDefault().Summary)</th>
<th>@Html.LabelFor(model => model.Tickets.FirstOrDefault().Last_Update)</th>
<th>@Html.LabelFor(model => model.Tickets.FirstOrDefault().OwnerOrCloser)</th>
<th>@Html.LabelFor(model => model.Tickets.FirstOrDefault().Date_Entered_UTC)</th>
<th>@Html.LabelFor(model => model.Tickets.FirstOrDefault().Date_Responded_UTC)</th>
<th>@Html.LabelFor(model => model.Tickets.FirstOrDefault().Date_Closed_UTC)</th>
</tr>
@Html.DisplayFor(x => x.Tickets)
</table>
</div>
【问题讨论】:
-
您不应通过 GET 操作单击链接传递列表。您应该在
ShowTickets操作方法中再次获取它。 -
您不能使用
Url.Action()将集合传递给 GET 方法(查看您生成的 html)。您需要将集合中每个项目的每个属性作为查询字符串参数传递,这会很疯狂,并且可能无论如何都会超过查询字符串限制)。在方法中再次获取集合。 -
我明白了。我会尝试并发布结果。谢谢你们的帮助,你们俩!
标签: c# asp.net-mvc razor