首先,请不要将此问题标记为重复,因为我已经检查了这些问题:
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”不是一个好主意。
答案 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 );
}