- PR -

JavaScriptについて

1
投稿者投稿内容
ウィン
会議室デビュー日: 2003/11/11
投稿数: 15
投稿日時: 2003-11-11 13:17
今までHTMLベースで開発していましたが、VB.NETを先日から勉強しています。
それで、わからないことがあります。

新しいプロジェクトのASP.NET.Webアプリケーションを選んでツールボックスのHTMLのButtonでボタンを作成しましたが、このボタンが押された時に
JavaScriptの関数が呼ばれ、他のテキストフールドのチェックを行いたいのですが
このJavaScriptの関数の記述をこのボタンのプロパティやコードのどこに記述すれば
それが出来るのでしょうか?
又、このボタンをダブルクリックすると「HTMLサーバコントロールに変換する
必要があります」とエラーになります。
これはどういうことでしょうか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-11-11 13:50
 HTMLコントロールの場合は、デザイナの下のタブでHTMLに切り替え、HTML上に記述します。


 ダブルクリックすると、サーバ側コード(ビハインドコード)にメソッドを作成しようとします。そのため、サーバコントロールに変更しなければなりません。

 仕方は、HTML表示に切り替え、属性にrunat="server"を追加します。次にソリューションエクスプローラで、aspxファイルを右クリックし、「コードを表示」を選択します。出てきたビハインドコードで、regionによって折りたたまれているところにコントロールの宣言がかたまっていますから、そこに先ほどのHTMLコントロールを追加します(HTMLコントロールは自動追記されない)。後はエディタの左上にあるドロップダウンからコントロール名を選び、右上のドロップダウンからイベントを選ぶと、コードが追加されます。HTMLコントロールは、メソッドを自分で追加しなければならないかもしれません。
ウィン
会議室デビュー日: 2003/11/11
投稿数: 15
投稿日時: 2003-11-11 14:31
RESありがとうございます。

>HTMLコントロールの場合は、デザイナの下のタブでHTMLに切り替え、HTML上に記述しま>す。
JavaScript分はHTMLに切り替えて行えば宜しいのですね。
知らずにResponse.writeで書き込んでいました。

すみません、勉強不足でまだ分かっていませんがサーバコントロールで私が理解しているのは

1.Webコントロール
  サーバ側のイベントのみ対応(ServerClick)・・・VBのイベントで記述する

2.HTMLコントロール
(1)サーバ側のイベント(Click)・・・VBのイベントで記述する
(2)クライアント側のイベント(HTMLに切り替えて ONCLICKタグとJavaScript分を追加する)

こんな解釈で宜しいでしょうか?



Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-11-11 14:56
>JavaScript分はHTMLに切り替えて行えば宜しいのですね。
>知らずにResponse.writeで書き込んでいました。

 Response.Writeで記述すると、HTMLタグの外側、ファイルの先頭に出力されます。
インテリセンスが働かないのですが、Page.RegisterStartupScriptメソッド、Page.RegisterClientScriptBlockメソッドというのがあるので、こちらで記述するべきなのでしょう。


>1.Webコントロール
>  サーバ側のイベントのみ対応(ServerClick)・・・VBのイベントで記述する

control.attribute.add("onclick", "<script language=""javascript"">〜</script>")
適切な箇所で、↑こんなことをすると、クライアント側イベントコードも作成可能です。
ウィン
会議室デビュー日: 2003/11/11
投稿数: 15
投稿日時: 2003-11-11 15:25
RESありがとうございます。

>Response.Writeで記述すると、HTMLタグの外側、ファイルの先頭に出力されます。

そうなんです、VBで生成すると、こんなことでしか出来ないのかと諦めていました。

>インテリセンスが働かないのですが、Page.RegisterStartupScriptメソッド、>Page.RegisterClientScriptBlockメソッドというのがあるので、こちらで記述するべき>なのでしょう。

そんな便利なメソッドがあるんですか?
活用させて頂きます。


>control.attribute.add("onclick", "<script language=""javascript"">〜></script>")
>適切な箇所で、↑こんなことをすると、クライアント側イベントコードも作成可能です。

VBでかなりのことが出来るんですね。お聞きして相当、得をしました。

これと関連あるかも知れませんがMSDNの資料中に
「HTMLコントロールはAttributeコレクションを使用して任意のHTMLコントロールにプログラムタグ属性を追加できます。これによりHTMLコントロールクラスに
宣言されていないタグについてもプロパティの設定が出来る」となっています。

それで朝からHTMLコントロールを選んだ時に表示されるプロパティを何度もみていますが「Attributeコレクション」なるものが見つかりません。
これは「control.attribute.add("」のことを意味するのでしょうか?
やりたいのは、HTMLコントロールボタンを押した時に、TARGET指定であるURLに
飛ばしたいのです。

control.attribute.add(HREF='xxxxxxxx" TARGET='XXX')

にすればよいのでしょうか?





Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-11-11 16:47
 デザイナの上にHTMLコントロールの、例えばbuttonを置きます。これをクリックして表示されるプロパティウインドウでは、「runat」というプロパティがあるのですが、disabledになっています。そこで、HTMLデザイナに切り替えます。

 HTMLデザイナ(エディタ)上で先ほど置いたbutton、すなわちinput要素を探します。この要素の適当なところでスペースキーをクリックすると、インテリセンスにより属性一覧が出てきます。ここで[ runat="server" ]を入力します。また、[ id="識別子" ]も入力します。この識別子が、サーバ上で使用する識別子になります。

 次に、いったん保存してからビハインドコードを表示します。ファイルの先頭付近に、「Webフォームデザイナで生成されたコード」というのがありますが、これを展開します(+をクリック)。
 VB.NETでは空のInitializeComponentメソッドの下にコントロールの宣言が並んでいますので、この下に宣言を追加します。
protected withevents 識別子 as system.web.ui.HtmlControls.HtmlInputButton

 コードエディタの左上にあるドロップダウンリストで、先ほど追加した「識別子」があることを確認します。これを選択します。すると、右上のドロップダウンリストには、左のドロップダウンリストで選択したコントロールのイベントが一覧表示されます。ここで、ServerClickを選択します。コードの一番最後にServerClickイベントハンドラが追加されます。

 クライアントコードを追加する場合は、上記のドロップダウンによる追加をせず、Page_Loadイベントハンドラの先頭で、
識別子.Attributes.Add("属性", "属性値")
を追加します。ここで記述したものが、レンダリングされるときに
<要素 属性="属性値" >
というように追加されます。
 例えば、アンカーの属性を追加するなら、
アンカー識別子.Attributes.Add("href", "URI")
アンカー識別子.Attributes.Add("target", "target-name")
…変更の場合は…
アンカー識別子.Attributes.Item("href") = "URI"
アンカー識別子.Attributes.Item("target") = "target-name"


 ここで注意しなければならないは…

1.htmlコントロールは、デフォルトではクライアントサイドコントロールである
 つまり、ASP.NET以外の環境と同じです。
 これをサーバサイドコントロールにするために、
 属性に「runat="server"」を追加します。

2.htmlコントロールにはデフォルトでIDが振られない
 サーバコントロールにするなら、
 プロパティウインドウか、HTMLエディタ上でIDを追加しなければなりません。
 このとき、ユーザコントロールなど、ビハインドコード上では階層が発生する
 ものは特に要注意です。

3.htmlコントロールはデフォルトではサーバサイドコードに登録されない
 クラスのプロテクテッドフィールドとして、開発者が追加する必要があります。
ウィン
会議室デビュー日: 2003/11/11
投稿数: 15
投稿日時: 2003-11-12 12:00
RESありがとうございました。
詳しいご説明頂き理解できました。
やはりHTMLコントロールを使うと開発時にはかなり面倒なんですね。

それで、最後になるかと思いますが、従来のASP開発では
クライアントサイドでチェックや設定できる内容はJavascriptで対応し
サーバサイドでないと出来ない処理はサーバへのイベント通知で行っていましたが
.NETではこの考え方を多少変える必要があるのでしょうか?
すべてWebコントロールを使いサーバサイドのイベント時にチェック処理を
行うのが開発が楽なような気がします。
この辺のご意見をお聞かせください。

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-11-12 12:25
 アンカーコントロールがない、というスレッドの方、レスついていませんが、これはWebControlのHyperLinkが該当すると思います。

 プロパティウインドウの「runat」の項目がdisabledになっていることや、当然ですがHTMLの要素としては「runat」という属性はありませんので、HtmlControlはクライアントでのみ処理する、と考えるのが妥当なのでしょう。ただし、パスワードコントロールなど、一部のコントロールについては該当するWebControlがありません。これらについて値を参照するために、サーバサイドコードで処理できる、ということでしょうか。
1

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