2017-08-04 65 views
0

我是MVC的新手,在webforms方面有一定的經驗。MVC - 從視圖刷新控制器SQL數據模型?

我目前在我的控制器中有一個ActionResult函數,它將我所有的SQL數據綁定到模型,然後我可以在視圖中成功構建數據視圖。

我的問題是,擁有一切正常工作,我需要渲染頁面之前,直接叫我的ActionResult控制器,這工作得很好:

public ActionResult Index() 
    { 
     Bind_grid(); 
     return View(); 
    } 

    public class My_Table 
    { 
      public string info_a { get; set; } 
      public string info_b { get; set; } 
      public string mod_id { get; set; } 
    } 

    public ActionResult Bind_grid() 
    { 
     SqlConnection checkitem = new SqlConnection("Data Source=[IPADDRESS];Persist Security Info=True;User ID=userid;Password=password"); 
     string query = "SELECT id, info_a, info_b FROM [my_db].[dbo].[ref_index]"; 
     SqlCommand execute = new SqlCommand(query, checkitem); 
     var model = new List<My_Table>(); 
     using (checkitem) 
     { 
      checkitem.Open(); 
      SqlDataReader rdr = execute.ExecuteReader(); 
      while (rdr.Read()) 
      { 
       var table = new My_Table(); 

       table.info_a = rdr["info_a"].ToString(); 
       table.info_b = rdr["info_b"].ToString(); 
       table.mod_id = rdr["id"].ToString(); 
       model.Add(table); 
      } 
      checkitem.Close(); 
     } 

     return View(model); 
    } 

我想知道如何刷新模式從視圖,而不是要求它在返回視圖之前運行,我已經嘗試過AJAX調用和@ HTML.Action調用Bind_grid,但我似乎無法讓頁面刷新數據。

從視圖中運行Bind_grid以刷新模型的任何建議?

目前我試試這個:

function bind_data() { 
      $.ajax({ 
      url: '@Url.Action("Bind_grid")', 
      method: 'POST', 
     }); 
     @{ 
      int p = 0; 
      foreach (var d in Model) 
      { 
       @:console.log(@d.mod_id); 
       p++; 
      } 
     } 
    } 

我設置爲10秒運行bind_data()函數, 從時間間隔, 之間的SQL數據庫中刪除一些ID的JavaScript的區間,但數據寫入控制檯仍然是原始提取的,而不是刷新的數據。

如果我手動刷新頁面(F5),我會得到正確的數據更新。

我猜我需要做一些部分回傳刷新剃鬚刀數據,但我不確定在MVC中做到這一點的最佳方式。任何幫助表示讚賞。

+0

你的ajax調用只是調用方法並返回視圖,但是你不用做任何事情(你需要在ajax成功回調中更新DOM)。你的循環是剃鬚刀(服務器端)代碼 - 它只是循環通過原始模型 –

回答

0

您應該能夠使用jQuery的load方法,調用你的JavaScript區間

$("#grid").load("bind_grid"); 
+0

我將如何刷新視圖中的間隔數據?我修改了我的問題,顯示瞭如何嘗試刷新,但除非手動刷新(F5)頁面,否則數據永遠不會更新。 –

+0

是不是做了與ajax請求(雖然,更清潔)相同的東西?...我知道bind_grid函數工作,因爲我有調試代碼寫入控制檯的代碼隱藏時,它運行時,它只是不更新的視圖,我相信這是因爲,雖然每次調用函數IS,剃鬚刀塊對頁面是靜態的,當我需要它重新計算每次調用bind_data函數時,我相信這是在哪裏麻煩存在。 –

0

通過代碼隱藏在做所有的處理解決了該問題,改變了Bind_grid() 到JsonResult,返回JSON( model.ToArray(),JsonRequestBehavior.AllowGet); 能夠通過ajax請求成功執行pull操作。