я пытаюсь создать отзывы по каждому продукту, я использовал Html.RenderAction
как использовать Html.RenderPartial с ViewModel
Html.RenderAction("ProductReviewTest", new { id = productids });
он работает нормально, но это занимает 9.4s, чтобы загрузить страницу продукта с обзорами, так пытался Html.RenderPartial, но дает ошибку
мой вид продукта:
@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>
мой взгляд отзыв м Одел:
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; }
}
мой 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);
}
мой взгляд отзыв:
@model IEnumerable<MVCProduct.Models.ProductViewModel>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.ReviewId)
</th>
.......
</table>
ошибка:
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]'.
любая помощь будет большой.
вам нужно понять разницу между «RenderAction» и «RenderPartial». В первом вы вызываете действие, а во втором вы вызываете частичное представление. Поэтому вы не можете передать 'productId' в' RenderPartial', вместо этого вам нужно передать 'List'. Также в «RenderPartial» вам нужно указать частичное имя представления, а не имя действия. –
ramiramilu
@ramiramilu, большое вам спасибо, я создал PartialView, щелкнув правой кнопкой мыши, добавьте представление, проверил создание частичного представления и теперь он работает, хорошо, что быстро Html.RenderPartial или Html.RenderAction? – stom
Это зависит, если вы используете 'RenderAction', вы вызываете тот же запрос linq снова и снова, что является дорогостоящим из-за ударов БД. Но если вы хотите сразу получить все элементы, а затем использовать «RenderPartial», вы можете избежать большинства ударов БД. – ramiramilu