2015-12-14 15 views
6

値のリストをループしているメソッドがありますが、私がしたいのは、ページを開いてその値を更新せずに変更する方法です現在のビュー。私はコードのようなものを試してみました。ページを更新せずに異なる値を表示する方法MVC C#

public static int myValueReader { get; set; } 

public static void ValueGenerator() 
{ 
    foreach (var item in myList) 
    { 
     myValue = item; 
     Thread.Sleep(1000); 
    } 
} 

実際には、フォームを閉じてもこの値を読みたいと思っています。私はこれを行うためにタスクを割り当てる必要があると推測しますが、それはMVCアプリケーションであるため、それを行うより良い方法があれば私はさまよっていましたか?

+4

長時間実行しているタスクで進捗状況を表示する場合は、配管のためにSignalRを見てください。 –

+1

あなたの目標は何ですか? SignalRはオプションですが、設定には手間がかかります。定期的なajax呼び出しはどうですか? – axlj

+0

@axlj私は8つのオブジェクトを持っていますが、同時にこれらの値を読む必要があります。そして、イベントを呼び出す必要があります。私が探している特定の値が画面に表示されています。 – WKara

答えて

5

はそれを行うための別の方法です:

  • 使用AJAXとあなたのViewBagであなたのコントローラでsetTimeout
  • 宣言つのアクション(この1つはあなたの異なる値を返します)
  • 整数、いくつかのように:ViewBag.totalItems

は、コントローラ内のアクションを宣言します。これは私ですこれは、データベースまたはデータとの接続になるためです。このアクションはitemIndexを受け取り、そのアイテムを返します。このような何か:

[HttpPost] 
public JsonResult GetItem(int index) { 
    return Json(myList.ElementAt(index)); 
} 

ViewBag.TotalItems:あなたのビューでは、あなたのリストを持っているどのように多くのアイテムを知っている必要があります。私あなたがViewBagを経由して整数として、その値を渡すことをお勧めします:

public ActionResult Index() { 
    ViewBag.TotalItems = myList.Count(); 
    return View(); 
} 

AJAXとsetTimeout:あなたはこのすべてを持っているならば、あなたはさわやかせずにビューを更新する準備が整いました:

<script> 
$(function() { 
    var totalItems = @Html.Raw(Json.Encode(ViewBag.TotalItems)); 
    var currentItemIndex = 0; 

    var getData = function() { 
     $.post("@Url.Action("GetItem")", {index:currentItemIndex}, function(data) { 

      // data is myList.ElementAt(index) 
      // do something with it 

     }).always(function() { 
      currentItemIndex++; 

      if(currentItemIndex < totalItems) { 
       setTimeout(getData, 1000); // get the next item every 1 sec 
      } 
     }) 
    } 

    getData(); // start updating 
}) 
</script> 
+0

これは大変ありがとうございます。 – WKara

+0

これはどのようにリアルタイム要件を満たしていますか? – axlj

+0

@axljこれはリアルタイム要件を満たしていない理由を私に説明してもらえますか?あなたはおそらく今まで理解していたかもしれないが、これはまったく新しいものなので問題は見えないのですか? – WKara

3

@DavidTanseyと言っている最高の賭けは、SignlarRです。これは、Webソケットをラップし、ユーザーのブラウザがそれをサポートしていない場合、長いポーリング/ etcに落ちます。ユーザーは特定のチャンネルを購読し、そのチャンネルでイベントを発生させることができます。

ビジネスロジックに関しては、非同期プログラミングテクニックを調べる必要があります。これを始めると、より具体的な質問が出るでしょう。ここで

関連する問題