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.IEnumerable1[Review.Models.ProductViewModel]'.
any help would be great.
RenderActionandRenderPartial. In the first you are calling action, but in second, you are directly calling partial view. So you cannot passproductIdinRenderPartial, instead you need to passList<ProductViewModel>. Also inRenderPartial, you need to give partial view name, not action name.RenderAction, you are calling the same linq query again and again which is costly because of DB hits. But if you want to get all items at once and then useRenderPartialthen you can avoid most of the DB hits.