2013-01-03 60 views
0

我在我的應用程序中使用Ajax更新視圖而不刷新網頁。如何在ajax請求時保存當前模型?

你能在這裏注意到嗎http://contoso2.azurewebsites.net/Test/DoTest,因爲我突出了黃色的部分視圖。

但問題是,當我輸入數據的項目(數學問題),當Ajax請求時,我沒有看到模型的變化。

public ActionResult DoTest() 
    { 
     List<Worksheet> worksheets = null; 

     if (Request.IsAjaxRequest()) 
     { 
      worksheets = Session["Worksheets"] as List<Worksheet>; 
      return PartialView("_Problems", worksheets[1]); 
     } 

     worksheets = new List<Worksheet>() 
     { 
      new Worksheet("Addition and Subtraction of absolute values", new List<Problem1>() { ... }), 
      new Worksheet("Addition and Subtraction of absolute values", new List<Problem1>() { ... }) 
     } 

     Session["Worksheets"] = worksheets; 
     return View(worksheets[0]); 
    } 

我使用Session恢復我的模型,但如果我在裏面調試我沒有看到模型的任何變化。當我按下繼續按鈕,我的模型更新時,我該怎麼辦?

編輯:這包含我的AJAX在Razor視圖

@using (Ajax.BeginForm(
    new AjaxOptions 
    { 
     HttpMethod = "get", 
     InsertionMode = InsertionMode.Replace, 
     UpdateTargetId = "problemList" 
    })) 
{ 
    <input type="submit" value="Continue" /> 
} 
+0

你爲什麼不將呼叫分成兩個動作。一個是獲取操作,呈現視圖,另一個是對最終用戶的響應採取行動的POST操作。 Post操作可以有一個參數列表,ASP.NET ModelBinder會照顧其餘的! – frictionlesspulley

+0

@frictionlesspulley我理解的第一部分。你能舉一個例子來指導我嗎?我在MVC方面經驗不足,而且我也不知道如何將參數列表通過Http –

+0

傳遞給您。看起來您只是在這裏進行操作,而不是將現有數據發回服務器。你是否期望它能夠更新存儲在每次獲得的會話中的數據? –

回答

2

我通常有兩種操作的視圖。雖然這不是強制性要求。

當用戶第一次進入頁面時,用HttpGet裝飾的第一個動作呈現Get頁面。當用戶點擊下一個併發布表單時,會調用第二個動作。

public class TestController { 

    [HttpGet] 
    public void DoTest(){ 

     var viewModel = new List<Worksheet>() 
     { 
      new Worksheet("Addition and Subtraction of absolute values", new List<Problem1>() { ... }), 
      new Worksheet("Addition and Subtraction of absolute values", new List<Problem1>() { ... }) 
     }; 
     return View(viewModel); 
    } 

    [HttpPost] 
    public void DoTest(List<Worksheet> worksheets){ 

     //do whatever you want with the user response 

     var response = worksheets[1]; 
     PartialView("_Problems",responseModel); 
    } 
} 

注意:您將不得不使用HttpMethod = "post"調用ajax調用。 ASP.NET中的模型綁定器將張貼在請求中的值綁定到你的responseModel worksheets

你應該試着去在「工具入門與 - ASPNET-mvc4」提供教程上http://asp.net/

+0

我承諾!我喜歡!!只有一個疑問,當我按下提交按鈕時,它不訪問HTTPPost方法,當我發佈時是否需要指定一些routeValue? –

+0

是你用HttpMethod =「Post」調用ajax調用嗎? – frictionlesspulley

+0

是的,現在它正在訪問它..現在我正在處理的是當我收到我的列表,值爲空 –