3

無料の Web サイトとして Azure でホストされている Web サイトを構築しようとしています。MVC4 を使用し、KnockoutMVC を使用しています。Web サイトは、コントローラーから 4 秒ごとにテーブルを更新しています。コードはローカルでは問題なく実行されますが、Azure Web サイトにデプロイすると、更新が処理されません。

私は今、完全に新しい MVC 4 プロジェクトを開始しました。ノックアウトを使用したいくつかの単純な関数で、現在の時刻を表示し、コントローラーから 0.5 秒ごとにこれを更新します。適切なウェブサイト。同じ問題が発生しており、ko.ServerAction 呼び出しが JavaScript 関数を停止しているように見えます。

意見

@using PerpetuumSoft.Knockout
@model MVCHelloWorld.Models.HelloWorldModel
@{
  var ko = Html.CreateKnockoutContext();
 }
<script type="text/javascript">
 function startTime() {
    var today = new Date();
    var h = today.getHours();
    var m = today.getMinutes();
    var s = today.getSeconds();
    // add a zero in front of numbers<10
    m = checkTime(m);
    s = checkTime(s);
    document.getElementById('time').innerHTML = h + ":" + m + ":" + s;

    @ko.ServerAction("Index", "HelloWorld");

    t = setTimeout(function() { startTime(); }, 500);
}

function checkTime(i) {
    if (i < 10) {
        i = "0" + i;
    }
    return i;
}  
</script>

<body onload="startTime()">
   <h2>Hello World - 2</h2>
   <div id="time"></div>

   <label>Knockout time</label>
   @ko.Html.Span(m => m.Time)
</body>

@ko.Apply(Model)

コントローラ

namespace MVCHelloWorld.Controllers
{
  public class HelloWorldController : BaseController
  {

    public HelloWorldModel model = new HelloWorldModel();

    public ActionResult Index()
    {
        GetTimeDoCalculation();

        return View();
    }

    public void GetTimeDoCalculation()
    {
        model.Time = DateTime.Now.ToString("H:mm:ss");
    }
 }
}

モデル

namespace MVCHelloWorld.Models
{
public class HelloWorldModel
  {
     public string Time { get; set; }
  }
}
4

1 に答える 1

1

これをビューの本文に追加してみてください:

<script type="text/javascript">
    @* Replace 4000 with the timeout, in milliseconds *@
    window.setInterval(startTime, 4000)
</script>

ビュー全体は次のようになります。

@using PerpetuumSoft.Knockout
@model MvcApplication2.Models.HelloWorldModel
@{
    var ko = Html.CreateKnockoutContext();
 }
<script type="text/javascript">
    function startTime() {
        var today = new Date();
        var h = today.getHours();
        var m = today.getMinutes();
        var s = today.getSeconds();
        // add a zero in front of numbers<10
        m = checkTime(m);
        s = checkTime(s);
        document.getElementById('time').innerHTML = h + ":" + m + ":" + s;

        @ko.ServerAction("Index", "HelloWorld");

        t = setTimeout(function() { startTime(); }, 500);
    }

    function checkTime(i) {
        if (i < 10) {
            i = "0" + i;
        }
        return i;
    }  
</script>

<body onload="startTime()">
   <h2>Hello World - 2</h2>
   <div id="time">

       <script type="text/javascript">
           @* Replace 4000 with the timeout, in milliseconds *@
           window.setInterval(startTime, 4000)
       </script>

       <label>Knockout time</label>
   @ko.Html.Span(m => m.Time)

   </div>
</body>

@ko.Apply(Model)
于 2013-06-21T09:24:43.267 に答える