Во-первых, пожалуйста, не отмечайте этот вопрос как дубликат, потому что я уже проверил это:
передать другую модель в частичное представление
MVCPartialView в нескольких видах с разными моделями
MVC 4 - использовать другую модель при частичном просмотре
, но ни одна из них не помогла в моем случае.
Я работаю на новостном сайте Asp.NET MVC.моя домашняя страница называется feed, а мой частичный просмотр называется _Comments.частичное представление _Comment имеет текстовую область и кнопку отправки для сохранения комментариев в зависимости от выбранного канала.
частичное представление _Comment:
<div class="col-sm-12">
@using (Ajax.BeginForm("AddComment", "Home", new AjaxOptions()
{UpdateTargetId= "update-comment", InsertionMode = InsertionMode.Replace }))
{
<textarea type="text" class="float-none form-control" required
name="comment" row="6" placeholder="What do you think?"></textarea>
<br />
<button type="submit" class="float-right btn btn-primary"
name="feedID" value="@Session["FeedID"]">Add comment</button>
}
</div>
Я вызываю частичное представление вфид страницы таким образом.
<div class="col-sm-12 col-md-12 col-lg-12 col-xl-12">
@Html.Partial("_Comment")
</div>
И я планирую показать добавленные комментарии под частичным представлением _comment, в другом частичном представлении под названием "_AddedComments"
_AddedComments
@model News.CommentViewModel
@if (Model.CommentV != null)
{
foreach (var item in Model.CommentV)
{
@item.Comment_Text <br />
}
}
поэтому в моем представлении ленты я вызываю 2 частичных представления следующим образом:
<div class="col-sm-12 col-md-12 col-lg-12 col-xl-12">
@Html.Partial("_Comment")
</div>
<div class="col-sm-12" id="update-comment">
@Html.Partial("_AddedComments")
</div>
У меня есть таблица с именем Comments, которая содержит:
CommentID
CommentText
Feed_ID_FK
Теперь, когда я нажимаю добавить комментарий в частичном представлении _comment, он приводит меня к этому методу контроллера
public PartialViewResult AddComment(string comment, int feedID)
{
Comment newComment = new Comment();
newComment.Feed_FK_ID = feedID;
newComment.Comment_Text = comment;
DB.Comments.Add(newComment);
DB.SaveChanges();
List<Comment> myComments = DB.Comments.Where(a => a.Feed_FK_ID ==
feedID).ToList();
CommentViewModel viewModel = new CommentViewModel
{
CommentV = myComments
};
return PartialView("_AddedComments");
}
Мой CommentViewModel содержит
public List<Comment> CommentV { get; set; } // Comments table
public List<Feed> FeedV { get; set; } // Feeds Table
и "myViewModel" на странице каналов содержит почти все (категории новостей, каналы, пользователи, изображения ...)
Так что в самой верхней части страницы канала я вызываю MyviewModel
@model News.myViewModel
и в_AddedComments, которые я вызываю CommentsViewModel
@model News.CommentViewModel.
Проблема заключается в том, что каждый раз, когда я открываю страницу каналов, я получаю следующее сообщение: «Элемент модели, переданный в словарь, имеет тип« News.myViewModel », но для этого словаря требуется элемент модели типа «News.CommentViewModel», хотя я передаю CommentViewModel в частичном представлении.Любая помощь будет принята с благодарностью.
Я попытался вызвать _AddedComments следующим образом: @ Html.Partial ("_ AddedComments", new CommentViewModel ()), но я получил нулевое исключение.Единственный способ заставить эту задачу работать, это добавить список комментариев в исходную модель View, но я думаю, что это не очень хорошая практика, потому что модель "myViewModel" содержит примерно 7 таблиц, и я просто хочу передать таблицу комментариев, так что я предполагаю, чтоне очень хорошая идея передавать модель "MyViewMdoel".