C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: IE8でwebmethodの動きについて


(過去ログ 83 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■49084 / inTopicNo.1)  IE8でwebmethodの動きについて
  
□投稿者/ 北村 正治 (1回)-(2010/04/21(Wed) 20:34:47)

分類:[ASP.NET (VB)] 

開発環境
Windows XP
Visual Studio 2005(ASP.NET)
ASP.NET AJAX 1.0

はじめまして

ASP.NETで、ボタンクリック時にwebmethodでサーバー側の処理を行い
その処理が終わるまでの間、メインの処理をループで待たせて
終わった後にボタンのポストバック処理を行っています。
WindowsXP IE6、IE7ではこの処理は動きますが。
Windows7 IE8では、webmethodが動かないようです。
Alertを出した場合、webmethodが動きますので
VBでいうところのDoEventsのような処理があれば動くように思えるのですが

解決方法をご存知の方がいらっしゃいましたら、ご教示お願い致します。


引用返信 編集キー/
■49085 / inTopicNo.2)  Re[1]: IE8でwebmethodの動きについて
□投稿者/ 北村 正治 (2回)-(2010/04/21(Wed) 20:37:01)
再現するソースを載せます

■Default2.aspx

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default2.aspx.vb" Inherits="Default2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>無題のページ</title>
<script type="text/javascript">
var endFlg = false;
function InputCheck() {

    endFlg = false;

    PageMethods.InputCheck(OnSuccess);

    Wait();
    
    return;
}
function OnSuccess() {
    endFlg = true;
}    
function Wait() {
/*    alert('中断');*/
    while(endFlg==false) {
        Sleep();
    }
    return;
}
function Sleep() {
    var xmlHttpObj=null;
    if (typeof ActiveXObject != "undefined") {
        var msXml = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP'];
        for (var ci=0; ci < msXml.length; ci++ ) {
            xmlHttpObj = new ActiveXObject(msXml[ci]);
            if (xmlHttpObj) break;
        }
    }
    else if (typeof XMLHttpRequest != "undefined") {
        xmlHttpObj = new XMLHttpRequest();
    }
    if (!xmlHttpObj) return;
    xmlHttpObj.open('GET', './Sleep.aspx?time=' + (new Date()).getTime(), false);
    xmlHttpObj.send(null);
}
</script>
    
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="True"></asp:ScriptManager>
    
    </div>
        <asp:Button ID="Button1" runat="server" Text="Button" UseSubmitBehavior="False" OnClientClick="InputCheck();" />
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    </form>
</body>
</html>

引用返信 編集キー/
■49086 / inTopicNo.3)  Re[2]: IE8でwebmethodの動きについて
□投稿者/ 北村 正治 (3回)-(2010/04/21(Wed) 20:38:16)
■Default2.aspx
Imports System.Web.Services
Imports System.Diagnostics

Partial Class Default2
    Inherits System.Web.UI.Page

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Me.Label1.Text = "処理終わり"
    End Sub

    <WebMethod()> _
    Public Shared Sub InputCheck()

        System.Threading.Thread.Sleep(3000)

    End Sub

End Class

引用返信 編集キー/
■49117 / inTopicNo.4)  Re[1]: IE8でwebmethodの動きについて
□投稿者/ もりお (212回)-(2010/04/22(Thu) 21:03:56)
No49084 (北村 正治 さん) に返信

> VBでいうところのDoEventsのような処理があれば動くように思えるのですが

無いような気がします。
WebMethod 処理後にポストバックを行うという処理の流れに焦点を絞った場合
ループを使わず InputCheck のコールバック関数で PostBack を呼び出す方法があります。

<script type="text/javascript">
  var Button1;
  var Label1;
  var OriginalOnclick;

  onload = Initialize;
  
  function Initialize()
  {
    Button1 = $get("<%= Button1.ClientID %>");
    Label1 = $get("<%= Label1.ClientID %>");
    OriginalOnclick = Button1.onclick;
    Button1.onclick = InputCheck;
  }

  function InputCheck()
  {
    Label1.innerHTML = "目下全力で処理中であります";
    Button1.disabled = true;
    PageMethods.InputCheck(OnSuccess);
  }

  function OnSuccess()
  {
    Button1.disabled = false;
    Label1.innerHTML = "";
    OriginalOnclick();
  }
</script>
...
<asp:Button ID="Button1" runat="server" Text="Button" UseSubmitBehavior="False" />
...

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -