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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.49084 の関連記事表示

<< 0 >>
■49084  IE8でwebmethodの動きについて
□投稿者/ 北村 正治 -(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のような処理があれば動くように思えるのですが

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

親記事 /過去ログ83より / 関連記事表示
削除チェック/

■49085  Re[1]: IE8でwebmethodの動きについて
□投稿者/ 北村 正治 -(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>
    
記事No.49084 のレス /過去ログ83より / 関連記事表示
削除チェック/

■49086  Re[2]: IE8でwebmethodの動きについて
□投稿者/ 北村 正治 -(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
記事No.49084 のレス /過去ログ83より / 関連記事表示
削除チェック/

■49117  Re[1]: IE8でwebmethodの動きについて
□投稿者/ もりお -(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" />
    ...
    
記事No.49084 のレス /過去ログ83より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -