MVC - 从View中刷新控制器SQL数据模型?

时间:2017-08-04 20:39:47

标签: sql asp.net-mvc razor

我是MVC的新手,在网络表格方面有一些经验。

我目前在我的控制器中有一个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++;
            }
        }
    }

我设置一个javascript间隔10秒来运行bind_data()函数, 在间隔之间从SQL数据库中删除一些ID, 但写入控制台的数据仍然是原始提取的数据,而不是刷新的数据。

如果我手动刷新页面(F5),我会得到正确的数据更新。

我猜我需要进行某种部分回发来刷新剃刀数据,但我不确定在MVC中执行此操作的最佳方法。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

您应该能够使用jquery加载方法,在JavaScript间隔中调用

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

答案 1 :(得分:0)

通过在代码隐藏中进行所有处理来修复问题,更改了Bind_grid() 到JsonResult,返回Json(model.ToArray(),JsonRequestBehavior.AllowGet); 能够通过ajax请求成功拉动。