您好我有以下foreach在表中创建行。
_Summary.cshtml
@model KpiSummaryViewModel
...
@foreach (TimeIntervalAndStatus error in Model.MergedErrorTimeIntervals)
{
<tr>
<td style="font-size: small" class="td downTimes">@error.TimeStart</td>
<td style="font-size: small" class="td downTimes">@error.TimeEnd</td>
<td style="font-size: small" class="td downTimes">@(error.TimeEnd -
error.TimeStart)</td>
<td style="font-size: small" class="td downTimes">
@Html.ActionLink("Details", "Index", "Details", error, null)
</td>
</tr>
}
当我单击上面的ActionLink时,我想将错误以及KpiSummaryViewModel.SummaryInformation.Name传递给Details Controller。
我的DetailsController
public class DetailsController : Controller
{
private TimeIntervalAndStatus _error;
// GET: Details
public ActionResult Index(TimeIntervalAndStatus error)
{
var detailsViewModel = new DetailsViewModel
{
QueryStartDate = error.TimeStart,
QueryEndDate = error.TimeEnd
};
return View(detailsViewModel);
}
}
我的DetailsViewModel
public class DetailViewModel
{
[DisplayFormat(DataFormatString = "{0:dd-MMM-yyyy}")]
public DateTime QueryStartDate { get; set; }
[DisplayFormat(DataFormatString = "{0:dd-MMM-yyyy}")]
public DateTime QueryEndDate { get; set; }
public TimeSpan DetailDownTimeDuration { get; set; }
}
我的Details.cshtml
@model Foo.Models.DetailViewModel
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Down-time details</title>
<script type="text/javascript">
</script>
</head>
<body>
<div>
</div>
</body>
</html>
所以,我需要的是访问Html.ActionLink传递的错误对象,这样我就可以将DetailsViewModel上的字段设置为那些TimeStart,TimeEnd和Duration。然后,我将使用此信息来检索其他信息。这部分有效,但我还需要访问@ Model.SummaryInformation.Name。所以我想传递两件事。
我不想将Name添加到TimeIntervalAndStatus,因为对象具有摘要名称没有意义。
也许我不应该使用@ Html.ActionLink,有更好的方法吗?
我尝试过制作我的ActionLink
@Html.ActionLink("Details", "Index", "Details", new { error, kpiName = Model.SummaryInformation.Name}, null)
然后我的控制器方法变为
public ActionResult Index(TimeIntervalAndStatus error, string kpiName)
{
}
但是错误总是为空。
答案 0 :(得分:2)
您应该在操作链接中传递错误ID而不是错误对象,因为它会生成Url。因此,请将您的视图更改为
@Html.ActionLink("Details", "Index", "Details", new { errorId = error.Id, kpiName = Model.SummaryInformation.Name}, null)
在您的控制器中,您可以使用错误ID
在操作方法中获取相关的错误对象public ActionResult Index(int errorId, string kpiName)
{
// get error object using error id
}
希望能解决你的问题!
答案 1 :(得分:0)
你好像这样做了。但是您的链接应该是
@ Html.ActionLink(“详细信息”,“索引”,“详细信息”,新{错误=错误,kpiName = Model.SummaryInformation.Name},null)
错误=错误需要分配错误值(在for循环中)以使控制器能够接收它。