2010-11-18 129 views
1

我想使用Ajax來允許用戶保存信息(顯示保存通知然後淡出)或提交(重定向到「您的表單已提交」頁面)。在這兩種情況下,我都需要進行錯誤檢查(我通過Html.EnableClientValidation()完成了工作,並且它正常工作)。提交後沒有重定向

目前,我的形式看起來像這樣...

<% using (Ajax.BeginForm("Index", "Scenario", new AjaxOptions { 
    HttpMethod = "Post", OnBegin = "scenarioCheckForErrors", 
    OnSuccess = "scenarioSubmitSuccess" }, new { id = "scenarioForm" })) 
{ %> 
    <!-- My form goes here. --> 
    <div class="submitButtons"> 
    <input type="submit" value="Save" name="submitButton" /> 
    <input type="submit" value="Submit" name="submitButton" /> 
    </div> 
} %> 

所有scenarioCheckForErrors所做的是改變一些圖像,如果在驗證過程中已發現的錯誤。 scenarioSubmitSuccess正在顯示保存通知。

在所有這些之間,我使用我的控制器來實際處理數據的保存以及做所有這些「東西」。下面是該方法的一部分:

[HttpPost] 
[Header("Setup Scenario")] 
public ActionResult Index(string submitButton) { 
    // Determine whether to just save or to save and submit. 
    switch (submitButton) 
    { 
     case "Save": 
      return Save(scenario); 
     case "Submit": 
      return Submit(scenario); 
     default: 
      // Should never be reached. 
      return View(); 
    } 
} 

而且保存並提交方法...

/// <summary> 
/// Save a the scenario. 
/// </summary> 
/// <param name="scenario"></param> 
/// <returns></returns> 
private ActionResult Save(Scenario scenario) 
{ 
    if (ModelState.IsValid && TryUpdateModel(scenario, "Scenario")) 
    { 
     // Save the scenario. 
    } 

    return View(scenario); 
} 

/// <summary> 
/// Submit the scenario. 
/// </summary> 
/// <param name="scenario"></param> 
/// <returns></returns> 
private ActionResult Submit(Scenario scenario) 
{ 
    if (TryUpdateModel(scenario, "SaveScenario")) 
    { 
     // Call Save() method, and then... 
     return Redirect("/Scenario/Done"); 
    } 

    return View(scenario); 
} 

我與如何讓重定向發生在「完成」頁面中掙扎,但仍然允許用戶保存時彈出「您已成功保存...」對話框。我沒有正確地做什麼?

+0

相同的概念在這裏描述:http://stackoverflow.com/questions/4047208/asp-net-mvc-prevent-double-form-posting/4047387 – Charlino 2010-11-18 17:35:01

回答

0

不是從視圖中重定向,您可以在顯示「您已成功保存」後使用JavaScript進行重定向。