2017-08-04 67 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操作。