2017-08-04 7 views
0

私はMVCを初め、ウェブフォームで何か経験を積んでいます。MVC - ViewからコントローラのSQLデータモデルをリフレッシュしますか?

私は現在、すべての自分のSQLデータをモデルにバインドするActionResult関数をコントローラに持っています。この関数は、ビューからデータビューを正常に構築できます。

私の問題は、すべてが正常に動作持っていることですが、私はページをレンダリングする前に、コントローラに直接私の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++; 
      } 
     } 
    } 

をそして、私はbind_data()関数を実行するために10秒間javascriptの間隔を設定し、 は、間隔のSQLデータベースから をいくつかのIDを削除するだけに書き込まれたデータコンソールは元のフェッチ済みであり、リフレッシュされたデータではありません。

手動でページ(F5)を更新すると、データが正しく更新されます。

私は、剃刀のデータを更新するために何らかの部分ポストバックを行う必要があると推測していますが、MVCでそれを行う最良の方法はわかりません。どんな助けもありがとうございます。あなたは、JavaScriptの間隔分離コードですべての処理を実行して問題を修正しました

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

あなたのajaxコールはメソッドを呼び出してビューを返すだけですが、あなたは何もしません(ajax成功コールバックでDOMを更新する必要があります)。そしてあなたのループは剃刀(サーバー側)のコードです - 元のモデルをループするだけです –

答えて

0

は、(JSONを返す、するJsonResultにBind_grid() を変更しましたモデル.Array()、JsonRequestBehavior.AllowGet); ajaxリクエストで成功したプルを実行できました。

+0

どのように私はビューの間隔でデータを更新するのですか?私はどのように更新しようとしているかを示す質問を改訂しましたが、手動でページを更新(F5)しない限り、データは更新されません。 –

+0

これはajaxリクエスト(とはいえ、クリーナー)と同じことではないのですか?...私はbind_grid関数が動作していることを知っています。実行時にコードビハインドでコンソールにデバッグコードを書き込んでいるのでビュー上で更新すると、私は信じていますが、関数が毎回呼び出されているにもかかわらず、カミソリのブロックがページに静的であるため、bind_data関数の呼び出しごとに再計算する必要があります。トラブルがあります。 –

0

に呼び出し、jqueryのloadメソッドを使用することができるはず

関連する問題