2

我有一个 MVC 项目,其中有一个页面,上面有几个表单。页面上的大部分内容都是根据用户提交的初始表单呈现的。当用户更新该页面上的信息时,我不希望整个页面刷新,我只需要它来提交表单并留在页面上。我尝试设置表单以使用 AJAX 提交,但我不知道如何使控制器方法返回来完成此操作。

形式:

<div id="HeatNameDiv" title="Change Heat Name">
@using (Ajax.BeginForm("ChangeHeatName", "Home", new AjaxOptions(){UpdateTargetId = "HeatNameDiv"}))
{
    <section>
        Heat Name:<input type="text" name="heatName" value="@Html.ValueFor(x => x.heatname)" style ="width:100px"/>
        Change to:<input type="text" name="updatedHeat" value="" style="width: 100px" />
        <input type="submit" name="ChangeHeatName" value="Change" />
    </section>
}

电流控制器:

 public ActionResult ChangeHeatName(string heatName, string updatedHeat)
    {
        string user = User.Identity.Name;
        HomeModel H = new HomeModel();
        H.ChangeHeatName(heatName, updatedHeat, user);
        return Content("Index");
    }
4

1 回答 1

3

这取决于你想要刷新什么。Ajax.BeginForm 需要一个 HTML 片段。因此,您需要一个表示要在提交后替换的 heatNameDiv 的部分:

public ActionResult ChangeHeatName(string heatName, string updatedHeat)
    {
        string user = User.Identity.Name;
        HomeModel H = new HomeModel();
        H.ChangeHeatName(heatName, updatedHeat, user);
        return PartialView("NameOfPartialView", H);
    }

我同意 Jeremy 的观点,因为 Ajax.BeginForm 不太灵活。过去我也尝试过使用它,但是它替换了目标元素,而不是目标的innerHtml,这使得它在许多场景中都变得困难。

$.ajax你可以在url: '@(Url.Action("MyActionReturningAPartialView"))'.success 回调中设置和function(response) { $('#heatNameDiv').innerHtml(response); }

您调用的操作仍会返回 PartialView。

于 2013-04-10T20:41:33.357 回答