0

я пытаюсь создать отзывы по каждому продукту, я использовал 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]'.

любая помощь будет большой.

+4

вам нужно понять разницу между «RenderAction» и «RenderPartial». В первом вы вызываете действие, а во втором вы вызываете частичное представление. Поэтому вы не можете передать 'productId' в' RenderPartial', вместо этого вам нужно передать 'List '. Также в «RenderPartial» вам нужно указать частичное имя представления, а не имя действия. – ramiramilu

+0

@ramiramilu, большое вам спасибо, я создал PartialView, щелкнув правой кнопкой мыши, добавьте представление, проверил создание частичного представления и теперь он работает, хорошо, что быстро Html.RenderPartial или Html.RenderAction? – stom

+0

Это зависит, если вы используете 'RenderAction', вы вызываете тот же запрос linq снова и снова, что является дорогостоящим из-за ударов БД. Но если вы хотите сразу получить все элементы, а затем использовать «RenderPartial», вы можете избежать большинства ударов БД. – ramiramilu

ответ

2

Существует разница между RenderAction и RenderPartial. В первом вы вызываете действие, а во втором вы вызываете частичное представление.

Итак, вы не можете пройти productId в RenderPartial, вместо этого вам необходимо пройти List<ProductViewModel>. Также в RenderPartial вам нужно указать частичное имя представления, а не имя действия.

+0

привет, еще один запрос, не имеет значения, используя 'PartialViewResult' с' return PartialView' и 'ActionResult' с 'return View' при использовании' Html.RenderPartial'? – stom

+0

Обычно нет разницы между 'ViewResult' и' PartialViewResult', как поток отклика рендеринга. – ramiramilu

0

Вы возвращаете список ProductViewModel для просмотра. Вместо этого используйте

var 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 
    }).FirstOrDefault(); 

возвращение PartialView (productviewmodel);

1

ViewResult:

public PartialViewResult ProductReviewTest() 
{ 
    return PartialView(); 
} 

вид продукта:

@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", Model.ProductReviews }); 

} 

</div> 
+0

спасибо @joaoeduardorf, но я думаю, вы забыли упомянуть, чтобы создать частичные виды – stom

Смежные вопросы