2013-04-10 45 views
2

我有一個包含多個表單的頁面的MVC項目。網頁上的大部分內容都是基於用戶提交的初始表單呈現的。當用戶更新該頁面上的信息時,我不希望整個頁面刷新,我只需要它提交表單並保留在頁面上。我試圖設置表單以使用AJAX提交,但我不知道如何使控制器方法返回來完成此操作。提交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

你通常要返回一個JsonResult。 – 2013-04-10 20:36:46

+0

如果我只是試圖保持在同一頁面上,看起來會是什麼樣子? – 2013-04-10 20:39:09

+1

我會使用jquery'$ .post'命令提交表單數據並返回JSON結果。如果結果表明成功,告訴你的jQuery做一些事情,如果失敗了,請做其他事情。我還沒有找到'Ajax.BeginForm'非常有用,但這是我個人的偏見。 – 2013-04-10 20:41:53

回答

4

這取決於你想要什麼刷新。 Ajax.BeginForm需要一個HTML片段。所以,你需要的部分,表示要替換後提交heatNameDiv:我與傑里米同意,因爲Ajax.BeginForm不夠靈活

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); 
    } 

。過去我一直努力使用它,但是它取代了目標元素,而不是目標的innerHtml,這使得它很難在很多場景中使用。

隨着$.ajax您可以設置url: '@(Url.Action("MyActionReturningAPartialView"))'並在.success回調function(response) { $('#heatNameDiv').innerHtml(response); }

你打電話仍然是操作返回PartialView。