2

RAZOR ビューを使用する vb.net MVC3 アプリケーションがあります。一部の関数は、データベースからデータをコンパイルしているため、完了するまでに時間がかかります。この長い待機中、ブラウザ画面は白く、アクティビティ リング以外に想定されていることを行っている兆候はありません。私がやりたいのは、プログレスバーを作成し、カウントメソッドでいくつかの簡単な計算を使用してプログレスバーの完了率を決定し、これを真っ白なブラウザ画面ではなく画面に表示することです..私はする必要があると確信しています.ある種の Jquery ウィジェットでこれを行います。そして、グーグル全体を見てきましたが、私がここで必要としているものに何もヒットしていないようです.白い画面が表示されるときに呼び出されるコントローラー関数は、次のとおりです。

      Function beginArchive()
        Dim cList As List(Of cours) = db.courses.ToList
        For Each x In cList
            Dim indCourse = x
            Dim courHfile As String = archiveFiles(x.course_id)
            Dim arcCourse As New archive
            arcCourse.cDesc = indCourse.course_description
            If Not String.IsNullOrEmpty(courHfile) Then
                arcCourse.cHandouts = courHfile
            End If
            arcCourse.cHours = indCourse.course_hours
            arcCourse.conNum = Convert.ToInt16(indCourse.courseNum)
            arcCourse.cPre = indCourse.course_prefix
            arcCourse.cRef = indCourse.course_ref
            arcCourse.cSpeaker = indCourse.course_speaker
            arcCourse.cTitle = indCourse.course_title
            db.archives.AddObject(arcCourse)
            db.SaveChanges()
            Dim testSuccess As Integer = delOldFiles(indCourse.course_id)
        Next
        Return RedirectToAction("Index", "Admin")

    End Function

Razor ビューは次のとおりです。

@Code
ViewData("Title") = "Archive Previous Conf. Handouts"
End Code
<fieldset>
<h2>You are about to archive all handouts from last years conference. If you continue all of those handouts will be moved to the archive</h2>
<div id="sidebar3">
<p>

@Html.ActionLink("Begin Archive", "beginArchive","handoutArchive")
@Html.ActionLink("Back to Admin Tools", "Index", "Admin")
</p>
</div>
</fieldset>

これに単純なプログレスバーを追加する方法についてのアイデアは、コントローラー自体によって起動される必要があると想定しています...

4

2 に答える 2

2

あなたが本質的に求めていることは、ページ/アクションの現在のデザインでは達成できません。コントローラーにリクエストを送信するリンクをクリックしています。コントローラーは、アクションが終了するまで待機してから、レンダリングして応答を返します。これは、新しい URL に誘導するのではなく、現在のページにデータを返す ajax 呼び出しを行うこととは異なります。これを行うには多くの方法があり、その多くは、どのように機能させたいかという要件によって異なります。

もし私が大手術をしようとしていたなら、これが私がすることです. 「これにはしばらく時間がかかる可能性があります」というメッセージとともにスピナーまたはある種のアイコンを表示し、アクションに ajax リクエストを行います。アクションが戻ると、メッセージを表示するか、新しいルートにリダイレクトできます。

jqueryを使った例

$.post('beingArchive/2012', function(data) {
  if(data.status === "success"){
        window.location.replace("/success");
  }else{
        $("#error-div").html("<em>Something went wrong!</em>");
  }
});

beginArchiveこれは、メソッドがまたはのようなjsonを返すことを前提としてい{"status":"success"}ます{"status":"error archiving reason blah"}

    [HttpPost]
    Public Function beginArchive() As JsonResult
    Dim status = "success"

    Try
            'do the archiving
    Catch e As Exception
        status = "error occurred"
    End Try
    Return New Json(New With { _
    Key .status = status _

    })
    End Function

(私は ac# 男なので、vb.net が正しくない場合は申し訳ありません。これは、アクションの実装をどのように想定しているかの単なる例です)。残念ながら、「配布資料のアーカイブ」の実装がどのようなものであるかを詳しく知ることができないため、アクションの進行状況を表示するための適切な解決策を実際に伝えることはできません. しかし、これは多くのアプリケーションが集中的な操作を処理するときに使用する標準的なソリューションだと思います。

于 2012-08-06T02:16:23.290 に答える
0

より良い応答を得るためにここでHTMLコードを確認するとよいでしょうが、簡単にできることは、プロセスをajax.beginformで実行し、beginフォームのonbegin/oncompleteパラメーターを使用してstartProgressbar/stopProgressbarメソッドを呼び出すことです。 。divにアニメーションGIFを入れて、上記の2つのメソッドでそのdivの表示/非表示を実行するだけです。

于 2012-08-06T01:45:39.407 に答える