如何在asp.net核心中使用ViewDataDictionary和Html.Partial?

前端之家收集整理的这篇文章主要介绍了如何在asp.net核心中使用ViewDataDictionary和Html.Partial?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的情况如下:

模型:

@H_404_4@public class Book { public string Id { get; set; } public string Name { get; set; } } public class Comment { public string Id { get; set; } public string BookId { get; set; } public string Content { get; set; } }

控制器:

@H_404_4@public IActionResult Detail(string id) { ViewData["DbContext"] = _context; // DbContext var model = ... // book model return View(model); }

视图:

详细视图:

@H_404_4@@if (Model?.Count > 0) { var context = (ApplicationDbContext)ViewData["DbContext"]; IEnumerable<Comment> comments = context.Comments.Where(x => x.BookId == Model.Id); @Html.Partial("_Comment",comments) }

评论局部视图:

@H_404_4@@model IEnumerable<Comment> @if (Model?.Count > 0) { <!-- display comments here... --> } <-- How to get "BookId" here if Model is null? -->

我试过这个:

@H_404_4@@Html.Partial("_Comment",comments,new ViewDataDictionary { { "BookId",Model.Id } })

然后

@H_404_4@@{ string bookid = ViewData["BookId"]?.ToString() ?? ""; } @if (Model?.Count() > 0) { <!-- display comments here... --> } <div id="@bookid"> other implements... </div>

但是错误

‘ViewDataDictionary’ does not contain a constructor that takes 0
arguments

当我选择ViewDataDictionary并按F12时,它会命中:

@H_404_4@namespace Microsoft.AspNetCore.Mvc.ViewFeatures { public ViewDataDictionary(IModelMetadataProvider MetadataProvider,ModelStateDictionary modelState); }

我不知道什么是IModelMetadataProvider和ModelStateDictionary?

我的目标:将视图Detail.cshtml中的模型注释发送到部分视图_Comment.cshtml,其中包含一个包含BookId的ViewDataDictionary.

我的问题:我怎么能这样做?

解决方法

另一种使用它的方法是将当前视图的ViewData传递给构造函数.这样,新的ViewDataDictionary将使用您使用集合初始值设定项放入的项目进行扩展. @H_404_4@@Html.Partial("MyPartial",new ViewDataDictionary(ViewData) { { "BookId",Model.Id } })

猜你在找的asp.Net相关文章