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

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

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

Re[10]: vbscript


(過去ログ 10 を表示中)

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

■1853 / inTopicNo.1)  vbscript
  
□投稿者/ pri (2回)-(2007/03/07(Wed) 15:58:34)

分類:[VB.NET (ASP.NET)] 

vbscriptを使い、確認メッセージを表示させて、

「はい」を選択した場合 →labelに"成功"と表示
「いいえ」を選択した場合→labelに"…"

というような処理にしたいと思い、

HTML側
<script language="vbscript">
<!--
  Sub Button1_OnClick

   dim a

   if MsgBox("おや ? 不思議 ! !", 4, "確認") = vbNo Then
    form1.text1.value = "No"
   else
    form1.text1.value = "Yes"
   end if
  End Sub
-->
</script>

ASP.NET側(Buttonイベント)
If text1.Value = "No" Then
 labe1.Text = "…"
Else
label1.text = "成功"
End If

と、しているのですが、
ボタンイベントがあるときは、値が取れず
ボタンイベントがないときは、値が取れる

というような感じになってしまっています。

なので、ボタンイベントが存在していても
値をとれる方法がわかる人がいたら、教えてください。

お願いいたします。
引用返信 編集キー/
■1856 / inTopicNo.2)  Re[1]: vbscript
□投稿者/ ぼのぼの (10回)-(2007/03/07(Wed) 17:20:02)
な、なぜにvbscript?(^^;
「IEでしか動かなくていいからどうしてもMsgBoxを使いたい」ということでしょうか?
ASP.NETとvbscriptはあまり相性が良くないので、
もしjavascriptのconfirmで代用してもいいなら、そっちを使うことをお勧めします。

あと。
> vbscriptを使い、確認メッセージを表示させて、
>
> 「はい」を選択した場合 →labelに"成功"と表示
> 「いいえ」を選択した場合→labelに"…"
>
> というような処理にしたいと思い、
これが実現できれば、サーバ側に処理をうつさずクライアントスクリプトだけで
全て処理してしまう、という方法でもOKですか?
それとも最終的にやりたいことは確認メッセージの結果をサーバ側で拾うことで、
上記の要件はその調査のためのミニマムコードなのでしょうか?
引用返信 編集キー/
■1858 / inTopicNo.3)  Re[2]: vbscript
□投稿者/ pri (4回)-(2007/03/07(Wed) 17:34:29)
No1856 (ぼのぼの さん) に返信

返信ありがとうございます。

> な、なぜにvbscript?(^^;
> 「IEでしか動かなくていいからどうしてもMsgBoxを使いたい」ということでしょうか?
> ASP.NETとvbscriptはあまり相性が良くないので、
> もしjavascriptのconfirmで代用してもいいなら、そっちを使うことをお勧めします。

なぜかと言いますと、確認ダイアログを表示する際に、
フォーカスをデフォルトで「いいえ」に設定したいってのがありまして
javascriptのconfirmでは、ちょっと無理でして
vbscriptというような感じになりました。
vbscript以外にいい方法あればそのほうがよいかもなんですが…

> これが実現できれば、サーバ側に処理をうつさずクライアントスクリプトだけで
> 全て処理してしまう、という方法でもOKですか?
> それとも最終的にやりたいことは確認メッセージの結果をサーバ側で拾うことで、
> 上記の要件はその調査のためのミニマムコードなのでしょうか?

サーバー側に処理が移らないと多分ダメです…。
今はラベルの表示だけですが、おっしゃる通りで、
後々違う処理を加える予定なので。。。
なので、値をサーバに返し、サーバー側で処理ができるようにしたいです。

違う方法のやり方でも、この処理ででもいいので
よろしくお願いします。
引用返信 編集キー/
■1859 / inTopicNo.4)  Re[3]: vbscript
□投稿者/ Blue (287回)-(2007/03/07(Wed) 17:42:35)
>フォーカスをデフォルトで「いいえ」に設定したいってのがありまして
「はい」がデフォルトになるように言い回しを変えるとか。
引用返信 編集キー/
■1860 / inTopicNo.5)  Re[3]: vbscript
□投稿者/ ぼのぼの (11回)-(2007/03/07(Wed) 17:44:59)
No1858 (pri さん) に返信
> なぜかと言いますと、確認ダイアログを表示する際に、
> フォーカスをデフォルトで「いいえ」に設定したいってのがありまして
> javascriptのconfirmでは、ちょっと無理でして
> vbscriptというような感じになりました。
> vbscript以外にいい方法あればそのほうがよいかもなんですが…
ちょっとめんどくさい上にこれもIE限定になってしまいますが、
確認ダイアログの中身を自作のHTMLにしてshowModalDialogを使えば、
javascriptでも同様のことはできると思います。

> サーバー側に処理が移らないと多分ダメです…。
> 今はラベルの表示だけですが、おっしゃる通りで、
> 後々違う処理を加える予定なので。。。
> なので、値をサーバに返し、サーバー側で処理ができるようにしたいです。
>
> 違う方法のやり方でも、この処理ででもいいので
> よろしくお願いします。
ちなみに、ASP.NETは1.1ですか?2.0ですか?
1.1だと使えないプロパティとかあるので…
引用返信 編集キー/
■1861 / inTopicNo.6)  Re[4]: vbscript
□投稿者/ pri (5回)-(2007/03/07(Wed) 17:56:16)
No1860 (ぼのぼの さん) に返信

度々ありがとうございます。

> ちょっとめんどくさい上にこれもIE限定になってしまいますが、
> 確認ダイアログの中身を自作のHTMLにしてshowModalDialogを使えば、
> javascriptでも同様のことはできると思います。

確認ダイアログの中身を自作のHTMLにしてshowModalDialogも試してみたのですが、
うまくいかず、このやり方に至ってるんですよね。。

> ちなみに、ASP.NETは1.1ですか?2.0ですか?
> 1.1だと使えないプロパティとかあるので…

Frameworkのバージョンでいいのですかね?
それでしたらV.1.1です。

よろしくお願いします。
引用返信 編集キー/
■1865 / inTopicNo.7)  Re[1]: vbscript
□投稿者/ ぼのぼの (12回)-(2007/03/07(Wed) 18:38:35)
No1853 (pri さん) に返信

ローカルでちょこっと試してみてたんですが…

> ボタンイベントがあるときは、値が取れず
> ボタンイベントがないときは、値が取れる
>
> というような感じになってしまっています。
>
> なので、ボタンイベントが存在していても
> 値をとれる方法がわかる人がいたら、教えてください。

これの意味がわかんなくなったので確認させてください。

ボタンイベントがあるとき=マウスでボタンを押したとき
ボタンイベントがないとき=テキストボックスでEnterキーを押したとき

という意味でしょうか?

で、「値が取れず」「値が取れる」というのは、
マウスでボタンを押すとダイアログの「はい」「いいえ」に合わせて
ラベルの表示が正しく「成功」「…」とならず、
テキストボックスでEnterキーを押すとダイアログの「はい」「いいえ」に合わせて
ラベルの表示が正しく「成功」「…」となる、という意味でしょうか?

だとするとこっちのローカルで起きている現象と逆なんですが(−_−;
引用返信 編集キー/
■1867 / inTopicNo.8)  Re[4]: vbscript
□投稿者/ ぼのぼの (13回)-(2007/03/07(Wed) 18:58:15)
No1859 (Blue さん) に返信
> >フォーカスをデフォルトで「いいえ」に設定したいってのがありまして
> 「はい」がデフォルトになるように言い回しを変えるとか。

言い回しを変えても差し障りないメッセージならこれが一番楽ですねぇ。
でも、例えばメッセージが
「本当に削除しますか?」
だった場合、逆の意味になるようにすると
「削除するのやめませんか?」
みたいな感じになっちゃいますねw
引用返信 編集キー/
■1868 / inTopicNo.9)  Re[2]: vbscript
□投稿者/ pri (6回)-(2007/03/07(Wed) 19:19:43)
No1865 (ぼのぼの さん) に返信

返信ありがとうございます。

> ローカルでちょこっと試してみてたんですが…

ありがとうございます。

> ボタンイベントがあるとき=マウスでボタンを押したとき
> ボタンイベントがないとき=テキストボックスでEnterキーを押したとき

これは、ボタンイベント自体(private button1 〜 end sub)をソースから削除し、
ボタンを押した際にvbscriptだけ起動する状態です。

その状態の場合は、pageが再度読み込まれないので、値を保持している状態なのだと思います。

ボタンイベントがあるときは、ボタンイベント時にpageが読み込まれてしまうので保持できないのだと思うのですが、
その対処法が思いつかず…
引用返信 編集キー/
■1874 / inTopicNo.10)  Re[3]: vbscript
□投稿者/ ぼのぼの (14回)-(2007/03/07(Wed) 20:08:08)
No1868 (pri さん) に返信
>>ボタンイベントがあるとき=マウスでボタンを押したとき
>>ボタンイベントがないとき=テキストボックスでEnterキーを押したとき
> 
> これは、ボタンイベント自体(private button1 〜 end sub)をソースから削除し、
> ボタンを押した際にvbscriptだけ起動する状態です。
> 
> その状態の場合は、pageが再度読み込まれないので、値を保持している状態なのだと思います。
> 
> ボタンイベントがあるときは、ボタンイベント時にpageが読み込まれてしまうので保持できないのだと思うのですが、
> その対処法が思いつかず…

うーん、おかしいなぁ…(−_−;
そういう意味だとすると、こちらのローカルではボタンイベントがあるときでも値が取れてます。

ちょっと長くなるので3つに分割して投稿しますね。
【1/3】
まずは最初に試したミニマムコード。

<WebForm1.aspx>
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="WebTest.WebForm1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
  <HEAD>
    <title>WebForm1</title>
    <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
    <meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    <script language="vbscript">
    <!--
    Sub Button1_OnClick
      If MsgBox("おや ? 不思議 ! !", vbYesNo + vbDefaultButton2, "確認") = vbNo Then
        Form1.TextBox1.value = "No"
      Else
        Form1.TextBox1.value = "Yes"
      End If
    End Sub
    -->
    </script>
  </HEAD>
  <body>
    <form id="Form1" method="post" runat="server">
      <asp:TextBox id="TextBox1" runat="server"></asp:TextBox><br>
      <asp:Button id="Button1" runat="server" Text="Button"></asp:Button><br>
      <asp:Label id="Label1" runat="server">Label</asp:Label>
      <input type="text" name="dummy" style="display:none">
    </form>
  </body>
</HTML>

<WebForm1.aspx.vb(自動生成部除く)>
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    If TextBox1.Text = "No" Then
        Label1.Text = "…"
    Else
        Label1.Text = "成功"
    End If
End Sub

このコードで、少なくともマウスでボタンを押したときは期待通りの動作になりました。
ただし、テキストボックスでEnterキーを押すと、ダイアログが出ずにFormが送信されちゃいました。
これには2つの対策方法があります。

引用返信 編集キー/
■1875 / inTopicNo.11)  Re[4]: vbscript
□投稿者/ ぼのぼの (15回)-(2007/03/07(Wed) 20:16:27)
【2/3】
次に1つめの対策方法。
WebForm1.aspxに1行追加します。

  <body>
    <form id="Form1" method="post" runat="server">
      <asp:TextBox id="TextBox1" runat="server"></asp:TextBox><br>
      <asp:Button id="Button1" runat="server" Text="Button"></asp:Button><br>
      <asp:Label id="Label1" runat="server">Label</asp:Label>
      <input type="text" style="display:none"><!--ここを追加-->
    </form>
  </body>

以前別件でたまたま見つけたのですが、IEには「Form内にテキストボックスが一つしかないと
EnterキーによるSubmitでボタンのClickイベントが発生しない」というバグ(?)があります。

なのでstyleで非表示にしたダミーのテキストボックスを追加して、
Form内にテキストボックスが2つ以上になる状態をつくりだしてあげます。

#思ったより短い…3分割する必要なかったなorz

引用返信 編集キー/
■1876 / inTopicNo.12)  Re[5]: vbscript
□投稿者/ ぼのぼの (17回)-(2007/03/07(Wed) 20:26:47)
【3/3】
次に2つめの対策方法。
Webフォームのボタンを使うと<input type="submit">になってしまうので、
HTMLのボタンの方を使ったら、<input type="button">として描画されるために
テキストボックスでEnterを押したときの送信自体が行われなくなる、と考えたのですが…

<WebForm1.aspx>
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="WebTest.WebForm1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
  <HEAD>
    <title>WebForm1</title>
    <meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
    <meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    <script language="vbscript">
    <!--
    Sub Button1_OnClick
      If MsgBox("おや ? 不思議 ! !", vbYesNo + vbDefaultButton2, "確認") = vbNo Then
        Form1.TextBox1.value = "No"
      Else
        Form1.TextBox1.value = "Yes"
      End If
    End Sub
    -->
    </script>
  </HEAD>
  <body>
    <form id="Form1" method="post" runat="server">
      <asp:TextBox id="TextBox1" runat="server"></asp:TextBox><br>
      <INPUT id="Button1" type="button" value="Button" name="Button1" runat="server"><br>
      <asp:Label id="Label1" runat="server">Label</asp:Label>
      <input type="text" style="display:none">
    </form>
  </body>
</HTML>

<WebForm1.aspx.vb(自動生成部除く)>
Private Sub Button1_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ServerClick
    If TextBox1.Text = "No" Then
        Label1.Text = "…"
    Else
        Label1.Text = "成功"
    End If
End Sub

動かしてみたらダイアログが出る前に<input>タグに自動で埋め込まれた__doPostBackが走ってしまい、
期待した動作になりませんでした。これじゃ対策方法とは言えませんね。
すみません。少し先走りました。

引用返信 編集キー/
■1877 / inTopicNo.13)  Re[6]: vbscript
□投稿者/ pri (7回)-(2007/03/07(Wed) 21:34:21)
No1876 (ぼのぼの さん) に返信

ソースまで書いていただきどうもありがとうございます。

明日早速書いていただいたソースを参考に
試していただきます。

せっかくソースまで書いていただいたのに
すぐに試せなくて、本当にすみません…

明日試したら結果書きます。
ので何かあったらまたよろしくお願いいたします。




引用返信 編集キー/
■1888 / inTopicNo.14)  Re[6]: vbscript
□投稿者/ pri (8回)-(2007/03/08(Thu) 11:09:14)
No1876 (ぼのぼの さん) に返信

いろいろ試してみたのですが、
MsgBoxで線タック下ボタンの値が、page再読み込みされることによって
消されてしまいます。

ボタンを押したPageには値あり
押され再読み込みされたPageには値なし

って感じです。


引用返信 編集キー/
■1892 / inTopicNo.15)  Re[7]: vbscript
□投稿者/ ぼのぼの (19回)-(2007/03/08(Thu) 11:27:05)
No1888 (pri さん) に返信
> いろいろ試してみたのですが、
> MsgBoxで線タック下ボタンの値が、page再読み込みされることによって
> 消されてしまいます。

原因としては、
・選択したボタンの値を保持するコントロールがサーバコントロールになっていない
・ViewStateが無効になってゐる
・Page_Loadで何か余計なことをしている
などが考えられますが…

私が貼ったコードを余計なコードを一切加えずそのまま動かすとどうなりますか?
引用返信 編集キー/
■1893 / inTopicNo.16)  Re[8]: vbscript
□投稿者/ pri (9回)-(2007/03/08(Thu) 11:44:22)
2007/03/08(Thu) 12:06:14 編集(投稿者)

No1892 (ぼのぼの さん) に返信

返信ありがとうございます。

> 原因としては、
> ・選択したボタンの値を保持するコントロールがサーバコントロールになっていない
> ・ViewStateが無効になってゐる
> ・Page_Loadで何か余計なことをしている
> などが考えられますが…

ページを再度新しくし、コードを貼り付けたので
余計なこととかはしていないと思います。

ViewStateも"True"になっております。

> 私が貼ったコードを余計なコードを一切加えずそのまま動かすとどうなりますか?

【3/3】
をそのまま貼り付けた結果、
TextBox1.Textの値は"Nothing"でした。
よって、確認メッセージでどちらを選択しても、
if文で、Elseの方の処理を行ってしまいます。

【1/3】
をそのまま貼り付けた結果、
TextBox1.Textの値は保持されていました。
よって望み通りの処理ができました。

WebControlとHymlControl
で、なぜ値を保持できる、できないに分かれるのかわかりませんが、
HtmlControlではこの処理はできないのでしょうか?

引用返信 編集キー/
■1895 / inTopicNo.17)  Re[9]: vbscript
□投稿者/ ぼのぼの (20回)-(2007/03/08(Thu) 12:48:53)
No1893 (pri さん) に返信
> 【3/3】
> をそのまま貼り付けた結果、
> TextBox1.Textの値は"Nothing"でした。
> よって、確認メッセージでどちらを選択しても、
> if文で、Elseの方の処理を行ってしまいます。

あー、そっか、VS2003だと貼り付けただけじゃ駄目なんだったorz
"Web フォーム デザイナで生成されたコード"のRegionを展開すると、

Protected WithEvents Button1 As System.Web.UI.WebControls.Button

の一行があるはず。HTMLコントロールを使う場合は、この部分を

Protected WithEvents Button1 As System.Web.UI.HtmlControls.HtmlInputButton

というふうに変えてやらないと駄目です。
デザイナで画面をつくると自動的に生成されるんですが…

ただ、どちらにしろ【3/3】は期待通りの動作にならないサンプルなので、

> 【1/3】
> をそのまま貼り付けた結果、
> TextBox1.Textの値は保持されていました。
> よって望み通りの処理ができました。

これができたってことはとりあえずは解決ってことになるでしょうか?
【2/3】を入れないとEnterキーでの動作がヘンにはなりますけども。

引用返信 編集キー/
■1948 / inTopicNo.18)  Re[10]: vbscript
□投稿者/ pri (10回)-(2007/03/09(Fri) 18:40:13)
2007/03/13(Tue) 10:54:12 編集(投稿者)

No1895 (ぼのぼの さん) に返信

返信遅くなりましてすみません…。

> これができたってことはとりあえずは解決ってことになるでしょうか?
> 【2/3】を入れないとEnterキーでの動作がヘンにはなりますけども。

はい。
おかげさまで解決です。
ほんとにありがとうございました。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -