ActionLink正在正常执行,但没有传递id变量。
首先在我的主视图中执行
<li>@{ Html.RenderAction("ReviewAverage", "Home", Model.TripId); }</li>
执行此操作:
[ChildActionOnly]
public ActionResult ReviewAverage(int? id)
{
Trip trip = db.Trips.Find(id);
List<int> values = trip.Reviews.Select(review => review.Rating).ToList();
double average = values.Average();
ViewData["ReviewAverage"] = average;
return PartialView("_ReviewAverage", id);
}
这是上面方法返回的部分视图,并且由于某种原因没有通过id = Model,即使模型变量是明确设置的。
下面的actionLink未将id传递给我的控制器
@model int
<li>@Model</li>
@Html.ActionLink("Reviews (avg: "+ ViewData["ReviewAverage"] +")", "Reviews", "Home", new { id = Model }))
该ID应该导致
public ActionResult Reviews(int? id)
{
Trip trip = db.Trips.Find(id);
List<Review> reviews = trip.Reviews;
return View(reviews);
}
答案 0 :(得分:1)
在ASP.NET MVC中创建指向控制器操作的链接时,最好使用通用的ActionLink方法,因为它允许使用重构友好的强类型链接。试试这个:
@Html.ActionLink("Reviews", "Home", new { id = item.Id })
有关详细信息,请查看How do I set a click event in C#?。希望这会有所帮助...
答案 1 :(得分:1)
RenderAction
重载的第三个参数是路由值。该方法需要具有键和值的字典。确保密钥与您的操作方法参数匹配。
您可以传递一个带有id属性的匿名对象(与ReviewAverage
操作方法参数名称匹配。
@{ Html.RenderAction("ReviewAverage", "Home", new { id= Model.TripId} ); }
现在对于你的动作链接,你正在使用不正确的重载,你正在使用的重载期望最后一个参数是一个匿名对象需要构建html属性(例如:css类/其他html属性)。
你可以使用正确的重载,它需要5个参数(第4个是路由值,第5个是htmlAttributes)
@Html.ActionLink("Reviews (avg: "+ ViewData["ReviewAverage"] +")",
"Reviews", "Home", new { id = Model },null))