Как сделать модель частичного вида независимой от самого вида? - PullRequest
0 голосов
/ 04 февраля 2019

Во-первых, пожалуйста, не отмечайте этот вопрос как дубликат, потому что я уже проверил это:

передать другую модель в частичное представление

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".

1 Ответ

0 голосов
/ 04 февраля 2019

измените свой код, как показано ниже,

public ActionResult 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",viewModel );
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...