一个视图中的多个可更新局部视图

Multiple updatable partial views in one view

我正在开发我的第一个 ASP.NET MVC 4 (C#) 应用程序。我制作了一个连接到 MongoDB 数据库的应用程序。我制作了一个带有输入表单的页面,一个带有显示数据列表的页面,我还制作了一个带有 edit/update 表单的页面来编辑保存的数据。

一切正常,但我想让应用程序更加用户友好。我不想在页面之间切换,而是想在一页上显示输入表单和保存的数据。我想在插入新数据时更新保存的数据。而当我要edit/update保存的数据时,输入形式必须与edit/update形式切换。

我已经阅读了 partial pagesmaster page (_Layout)。我读到我可以用 javascript / jQuery 更新 partial pages

因为我是 ASP.NET MVC 的新手,所以我想知道这是否是实现我目标的正确和最佳方法,或者是否有更好的方法。另外,最好能提供一些关于重要事项的提示。

在 MVC 中,您有视图、分部视图和布局。所有这些都是 "views",在大多数情况下,区别仅在于您如何使用它们。

局部视图只是在没有布局的情况下呈现的视图,这可以通过 1) returning PartialView 从动作或 2) 使用 Html.Partial Razor 来完成视图中的助手。

布局只是一个视图,它被引用为另一个视图的布局。这可以通过 1) 通过 Layout = "~/Views/SomeLayout.cshtml"; 在视图中手动指定布局或 2) 通过使用 _ViewStart.cshtml 文件来实现。使布局真正不同于任何其他视图的唯一一件事是它将调用 @RenderBody(),这指示应将其放置的任何视图引用的呈现结果。

这是对 ASP.NET MVC 中视图的非常简短的介绍。当谈到使用 AJAX 之类的东西来替换页面的一部分时,重要的是要意识到在页面生命周期的这一点上,不存在诸如局部视图、布局等之类的东西。你所拥有的只是HTML 浏览器已从服务器接收并用于构建网页的内部表示,称为 "DOM" 或文档对象模型。您不能只替换页面上的 "partial view";您必须替换 DOM 的一部分。这听起来像是语义,但这是一个重要的区别,因为客户端,在本例中是 Web 浏览器,不知道文档的哪些部分是或不是通过服务器端的部分视图呈现的,也不关心.

但是,您替换的 source 可以是分部视图,至少在某种意义上,您可以使用分部视图生成可以发送到客户端作为响应。响应您的 AJAX 请求的操作方法可以 return PartialView("_SomePartialView") 并且该视图将被渲染,传递给它的任何数据,没有布局,并作为响应发送给客户端.不过,此时它只是 HTML,而且 HTML 的生成方式也没有区别。您的 AJAX 请求的回调将收到此 HTML 并且必须对其进行处理。与典型的浏览器请求不同,浏览器不会自动对此响应执行任何操作(即从中呈现网页)。您有责任 select 您想要替换的 DOM 的一部分,并将此 HTML 响应插入到 DOM.