如何解决如何在“编辑”和“详细信息”页面之间共享“注释”部分?
我有一个简单的Asp.Net MVC Core应用程序(“待办事项列表”)。每个“ Todo”项目都有零个或多个“ Notes”。
问题:
我已将相同的“注释”部分复制/粘贴到“编辑”和“详细信息” .cshtml页面中。如果我可以一次为.Notes编写.cshtml,然后在两个页面中简单地“包含”,那就太好了。
我尝试使用部分类...但是由于每个父页面中的模型不同,因此无法正常工作
Edit.cshtml:
@page
@model Todo.Pages.EditModel
@using Todo.Pages.TodoList
...
<div>
<!-- I want to do something like this... -->
<partial name="notes_history" />
</div>
notes_history.cshtml:
@model Todo.Pages.EditModel
<div class="form-group card">
<div class="card-body">
<h4>Todo List History</hr>
<table class="table">
<thead>
<tr>
<th>@Html.DisplayNameFor(model => model.TodoItem.Notes[0].CreatedDate)</th>
<th>@Html.DisplayNameFor(model => model.TodoItem.Notes[0].Text)</th>
...
<tbody>
@foreach (var note in model.TodoItem.Notes)
{
<tr>
<td>@Html.DisplayFor(modelItem => note.CreatedDate)</th>
<td>@Html.DisplayFor(modelItem => note.Text)</th>
...
这在我的“编辑”页面上可以正常使用...但是在“详细信息” ..或我可能要在其中包括“笔记历史记录”的任何其他页面上都无法使用。
如何使用部分类进行此项工作?或者我可以使用哪些不同的Asp.Net Core功能在“编辑”之间共享“注释”。 “详细信息”(可能还有其他)父页面?
解决方法
您需要为“局部视图”声明模型类型。这将是您要在部分视图中显示的数据。
按惯例,部分视图名称以_
开头。因此,假设用于显示笔记的部分视图名为_NotesList.cshtml
。
@model List<Todo.Pages.Note>
<div class="form-group card">
<div class="card-body">
<h4>Todo List History</hr>
<table class="table">
<thead>
<tr>
<th>@Html.DisplayNameFor(model => model[0].CreatedDate)</th>
<th>@Html.DisplayNameFor(model => model[0].Text)</th>
...
</tr>
</thead>
<tbody>
@foreach (var note in Model)
{
<tr>
<td>@Html.DisplayFor(modelItem => note.CreatedDate)</th>
<td>@Html.DisplayFor(modelItem => note.Text)</th>
...
现在,以下是在主视图中使用部分视图的方法之一。
Edit.cshtml
@page
@model Todo.Pages.EditModel
@using Todo.Pages.TodoList
...
<div>
<!-- I want to do something like this... -->
@{Html.RenderPartial("_NotesList",Model.Notes);}
</div>
在这里,期望在EditModel类中具有一个属性Notes
,如下所示。
public class EditModel
{
....
public List<Note> Notes {get;set;}
....
}
我希望这可以帮助您解决问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。