- PR -

処理中に画面を利用不可にするには?

投稿者投稿内容
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2007-02-21 00:17
引用:

きよよさんの書き込み (2007-02-20 16:49) より:

JavaScriptでdisabledをTrueに設定すると、ボタン押下時のPostBackで
画面のコントロールの値をクリアしてしまう現象などが起きました。
(テキストはReadOnlyにすれば、値をクリアしないそうです。)


これはdisabledにされたform部品はPOSTの対象にならないため、サーバ側に更新値が渡らないから。

引用:

また、リンクボタンはEnabledをfalseにしても、見た目は使えないように
見えますが、クリックすると処理を実行してしまいます。


Aタグはもともとform部品でないので、href属性とonclick属性を潰さないとだめ。

引用:

Windowsアプリケーションなら、迷うことなく簡単にできることでも
ASPになると実装が不可能だったり、可能でも処理が複雑になってしまうのですね。


画面を表示してる端末とコードビハインドの処理を実行する端末が物理的に離れてますからね。
即時的な画面制御はJavaScriptでできる範囲でしかできないし、
それもフィッシングやブラクラへの対策でどんどん制約がキツくなってきてるし、
同じようにHTMLやJavaScriptを書いてもブラウザによって表示や動作が異なったりするし。
この違いを理解してない人が顧客との窓口に立つと、泣きをみます(;_;

で、主題の件ですが、mioさんも仰ってるように、
ASP.NETの場合はコントロールを「不活性」にするのではなく、
styleをいじって「非表示」にしてしまう方がお手軽です。
極端な例ですが、こんな方法もありますよっと。

コード:

<%@ Page Language="VB" %>
<script runat="server">
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)

    End Sub

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        System.Threading.Thread.Sleep(5000)
    End Sub
</script>
<html>
<head>
  <title>test</title>
  <script type="text/javascript">
    function showWait() {
      document.forms[0].style.display = "none";
      var div = document.createElement("div");
      div.style.width = "100%";
      div.style.textAlign = "center";
      div.innerText = "処理中でぃ〜〜す!!!!!";
      document.body.appendChild(div);
      document.body.style.cursor = "wait";
    }
    </script>
</head>
<body>
  <form id="form1" runat="server">
    <asp:Button ID="Button1" runat="server" Text="sleep 5 sec"
                OnClick="Button1_Click" OnClientClick="showWait()" />
  </form>
</body>
</html>


しかし、この方法に限らず、「送信直前にJavaScriptで画面をこちゃこちゃ」て方法は、
JavaScriptをOffられたら動きませんし、Validatorを使おうとするとロジックが破綻します。
そこまで考慮する必要があるのなら、もうJittaさんのブログを見るしかないですw
きよよ
常連さん
会議室デビュー日: 2007/01/17
投稿数: 32
投稿日時: 2007-02-21 13:05
jittaさんのブログはすでに参考にさせて頂きました。
ASP側で処理するので、処理中に画面のリロードなども可能なので
機能としてはとてもいいと思い実装してみたのですが、
組み込む際にロジックの変更が必要なプログラムが出てきたので断念しました。

ぼのぼのさんの方法を試させて頂いたところ、とても簡単に
処理中ということがユーザーに伝わるので、再度どの方法を
使って処理中の表現するかを検討したいと思います。

本当にありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-02-22 22:15
引用:

きよよさんの書き込み (2007-02-21 13:05) より:
jittaさんのブログはすでに参考にさせて頂きました。
ASP側で処理するので、処理中に画面のリロードなども可能なので
機能としてはとてもいいと思い実装してみたのですが、
組み込む際にロジックの変更が必要なプログラムが出てきたので断念しました。

ぼのぼのさんの方法を試させて頂いたところ、とても簡単に
処理中ということがユーザーに伝わるので、再度どの方法を
使って処理中の表現するかを検討したいと思います。

本当にありがとうございました。



んじゃぁ、noscript 要素を使って、スクリプトを有効にしてください、メッセージも出せるようにしておきましょう。
_________________

スキルアップ/キャリアアップ(JOB@IT)