i am trying to create user reviews under each product, i used Html.RenderAction
Html.RenderAction("ProductReviewTest", new { id = productids });
it works fine but it takes 9.4s to load the product page with the reviews, so tried Html.RenderPartial but gives error
my product view:
@model MVCProduct.Models.Product
<!--here displaying products-->
<!--displaying reviews in same view-->
<div class="display-field">
<p> Reviews for @Html.DisplayFor(model => model.ProductTitle) </p>
@{
int productid = Model.ProductID;
Html.RenderPartial("ProductReviewTest", new { id = productid });
}
</div>
my review view model:
public class ProductViewModel
{
public int ReviewId { get; set; }
public int? ProductID { get; set; }
public string ReviewTitle { get; set; }
public string ReviewMessage { get; set; }
public int? Rating { get; set; }
public string CustomerName { get; set; }
public string ReviewStatus { get; set; }
}
my ViewResult:
public PartialViewResult ProductReviewTest(int id)
{
List<ProductViewModel> productviewmodel = (from a in dbo.ProductReviews
where a.ProductID ==id
select new ProductViewModel
{
ReviewId=a.ReviewId,
ProductID=a.ProductID,
ReviewTitle =a.ReviewTitle,
ReviewMessage =a.ReviewMessage,
Rating =a.Rating,
CustomerName =a.CustomerName,
ReviewStatus=a.ReviewStatus
}).ToList();
return PartialView(productviewmodel);
}
my review view:
@model IEnumerable<MVCProduct.Models.ProductViewModel>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.ReviewId)
</th>
.......
</table>
error:
The model item passed into the dictionary is of type '<>f__AnonymousType5
1[System.Int32]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable
1[Review.Models.ProductViewModel]'.
any help would be great.
There is a difference between
RenderAction
andRenderPartial
. In the first you are calling action, but in second, you are directly calling partial view.So you cannot pass
productId
inRenderPartial
, instead you need to passList<ProductViewModel>
. Also inRenderPartial
, you need to give partial view name, not the action name.