我有一个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");
}
答案 0 :(得分:3)
这取决于你想要刷新的内容。 Ajax.BeginForm需要一个HTML片段。所以你需要一个partial来表示你想要在提交后替换的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。