如何使局部视图的模型独立于视图本身?

时间:2019-02-04 11:39:31

标签: c# .net asp.net-mvc

首先,请不要将此问题标记为重复,因为我已经检查了这些问题:

pass a different model to the partial view

MVC PartialView in multiple Views with different models

MVC 4 - Use a different model in partial view

但是对于我来说,他们都没有帮助。

我在Asp.NET MVC新闻网站上工作。 我的主页称为feed,而我的局部视图称为_Comments。 _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的表,其中包含:

评论ID

CommentText

Feed_ID_FK

现在,当我在_comment Partial视图中按添加注释时,它将带我进入该控制器方法

  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 :(得分:1)

如下更改代码,

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 );
        }