在视图中放置模态代码是很好的做法

本文关键字:很好 代码 模态 视图 | 更新日期: 2023-09-27 18:01:49

我正在开发一个网站,但是遇到了一个绊脚石。我试图遵循适当的MVC设计模式。

这将是一个很好的做法,把模态html内的"索引"视图,负责显示所有的人?例如,我有一个列出所有人的表。表格中的每个人条目都有一个"查看/编辑"按钮,当我单击该按钮时,我想显示模态。这个模态代码是否可以驻留在"索引"视图中,并由"视图/编辑"按钮触发,或者我是否应该在控制器中调用适当的操作以某种方式返回模态?

这里是我的代码目前,如果你需要看到我所做的到目前为止。下面的模态代码位于"Index"视图中。

<div class="row">
    <div class="col-sm-12">
        <table class="table table-hover">
            <thead>
                <tr>
                    <th>@Html.ActionLink("Name", "PersonList", new { sortOrder = ViewBag.NameSort, currentFilter = ViewBag.CurrentFilter })</th>
                    <th>@Html.ActionLink("Date Of Birth", "PersonList", new { sortOrder = ViewBag.DOBSort, currentFilter = ViewBag.CurrentFilter })</th>
                    <th>@Html.ActionLink("Last Reg Date", "PersonList", new { sortOrder = ViewBag.LARDSort, currentFilter = ViewBag.CurrentFilter })</th>
                    <th>@Html.ActionLink("Last Reg Number", "PersonList", new { sortOrder = ViewBag.LARNSort, currentFilter = ViewBag.CurrentFilter })</th>
                    <th>@Html.ActionLink("Reg Count", "PersonList", new { sortOrder = ViewBag.RegCountSort, currentFilter = ViewBag.CurrentFilter })</th>
                    <th>@Html.ActionLink("Gender", "PersonList", new { sortOrder = ViewBag.GenderSort, currentFilter = ViewBag.CurrentFilter })</th>
                    <th>Actions</th>
                </tr>
            </thead>
            <tbody id="updatedContent">
                @foreach (var person in Model)
                {
                    <tr>
                        <td>@person.Name  @person.Surname</td>
                        <td>@person.BirthDate</td>
                        <td>@person.LastActiveRegistrationDate_Description</td>
                        <td>@person.LastActiveRegistrationNo_Description</td>
                        <td>@person.ActiveRegistrationCount_Description</td>
                        <td>@person.Gender_Description</td>
                        <td>@Html.ActionLink("View/Edit", "", "", null, new { @class = "btn btn-info btn-md", data_toggle = "modal", data_target = "#myModal" })</td>
                    </tr>
                }
            </tbody>
        </table>
    </div>
</div>
Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount
@Html.PagedListPager(Model, page => Url.Action("PersonList",
    new { page, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter }))
@* Modal code here for editing the Person *@
@* Called upon the Click of Edit/View *@
<div class="modal fade" id="myModal" role="dialog">
    <div class="modal-dialog">
        <!-- Modal content-->
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal">&times;</button>
                <h4 class="modal-title">View/Edit Person</h4>
            </div>
            <div class="modal-body">
                <p>Here we will be able to View/Edit the Person object.</p>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Save</button>
            </div>
        </div>
    </div>
</div>

在视图中放置模态代码是很好的做法

我看不出你为什么不把那个视图的标记放在那个视图中。把它放在一个单独的视图中并动态调用它在某些情况下可能会有好处,但我不认为这是其中之一。

如果"modal"组件需要获取更多的数据,你通常会这样做。因为在这种情况下,在多个HTTP请求中获取少量数据与在初始请求中将所有数据放在页面上之间需要权衡。如果用户可能只与少量记录交互,则不希望将所有数据放在那里。

但是,如果所需的所有数据都已经在页面上,那么就没有理由将该标记放在单独的HTTP请求中。因为这样每次有人编辑记录时,您都要重复该请求以获得相同的标记。不妨在页面加载时发送一次。

如果每条记录有很多不同的数据,请考虑使用AJAX请求。如果它只是标记中的一个隐藏的编辑表单,则将其保留在相同的标记中。事实上,它的"模态"是一个UI关注,而不是一个单独的请求关注。

相关文章: