C# で Web フォームを使用して Web に「プログレス バー」を表示する方法を探しています。
サーバーで実行されるバックグラウンド プロセスについて、1%、2%、3% などのようにラベルを表示したいだけです。そして、更新が終わったらアラートを表示したりとか、 本当の必要性はそれよりも少し複雑ですが、ベースを手に入れれば、自分で作ることができると思います。私がコードで抱えている問題は、私が常に 0 を取得していることです..「進行状況バー」で更新されません。何かが欠けていますが、それが何であるかわかりません。
編集
ラベルの代わりに値を表示するために毎秒値を警告しようとしましたが、とにかく機能していません。
最初の質問を見逃しOnClientClick="javascript:GetProgress();"
ました。更新しましたが、とにかく機能しません
編集 2
HttpConext.Current は、スレッドとして呼び出すときに null になっています。セッションまたはアプリケーション以外のもの、おそらくシングルトーン クラスを使用する必要がありますか?
どんな助けでも本当に感謝しています。
ASPX と JS の重要事項
<div style="width: 800px" class="css_container">
<cc1:ToolkitScriptManager ID="sm" runat="server" EnableScriptGlobalization="true"
EnableScriptLocalization="true" AsyncPostBackTimeout="60000" EnablePageMethods="true">
</cc1:ToolkitScriptManager>
<asp:UpdatePanel ID="upPanel" runat="server">
<ContentTemplate>
<asp:Button ID="btn" runat="server" Text="Do Something"
CausesValidation="False" OnClick="btn_Click" OnClientClick="javascript:GetProgress();" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
function GetProgress() {
PageMethods.GetProcessed(function(result) {
alert(result);
if (result < 100) {
setTimeout(function(){GetProgress();}, 1000);
}
});
}
コード ビハインドの重要事項
[WebMethod(EnableSession=true), ScriptMethod]
public static string GetProcessed()
{
return HttpContext.Current.Session["processed"].ToString();
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Session["processed"] = 0;
}
}
protected void btn_Click(object sender, EventArgs e)
{
AClass oClass = new AClass();
Thread oThread = new Thread(delegate()
{
oClass.UpdateSession();
});
oThread.Start();
}
Aclassで大切なこと
public class AClass
{
public void UpdateSession()
{
for(int i = 0; i< 100; i++)
{
HttpContext.Current.Session["processed"] = i;
System.Threading.Thread.Sleep(1000);
}
}
}