从局部视图将整数传递给actionLink

时间:2017-03-17 20:02:32

标签: c# asp.net-mvc

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);
        }

2 个答案:

答案 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))