这个问题的解决方法是在 Ajax.BeginForm 中使用 OnBegin 事件来呈现局部视图。这个事件会在 Ajax 请求开始之前调用并返回一个布尔值,如果返回 false,则取消 Ajax 请求。现在,我们将使用 OnBegin 事件来呈现局部视图。
首先,为了演示这个问题,我们将创建一个简单的模型和视图文件。在这个视图文件中,我们将使用 Ajax.BeginForm 和一个 div 标签来呈现局部视图。
模型代码:
public class Person { public int Id { get; set; } public string Name { get; set; } }
视图代码(PartialView.cshtml):
@model Person
@using (Ajax.BeginForm("PartialView", new AjaxOptions() { UpdateTargetId = "partialDiv" })) { @Html.HiddenFor(m => m.Id) }
现在,我们将在控制器中创建一个索引视图和一个处理 Ajax 请求的方法。
控制器代码:
public ActionResult Index() { return View(new Person() { Id = 1, Name = "John" }); }
[HttpPost] public ActionResult PartialView(Person model) { // Do some logic here return PartialView("_PartialView", model); }
现在,当我们点击提交按钮时,应该呈现局部视图,但是 Page_Load 事件不会呈现视图。因此,我们将使用 OnBegin 事件来呈现视图。
视图代码更新:
@model Person
@using (Ajax.BeginForm("PartialView", new AjaxOptions() { UpdateTargetId = "partialDiv", OnBegin = "onBegin" })) { @Html.HiddenFor(m => m.Id) }
现在,我们在 Ajax.BeginForm 中使用 OnBegin 事件来呈现局部视图。当用户点击提交按钮时,该事件将被调用,将 div 标签的内容更改为“加载中...”。然后,Ajax 请求被发送到服务器上的处理方法,处理方法将呈现局部视图,该视图将通过 Ajax 请求发送回客户端,并使用 UpdateTargetId 属性替换 div 中的