- - PR -
JavaScriptについて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2003-11-11 13:17
今までHTMLベースで開発していましたが、VB.NETを先日から勉強しています。
それで、わからないことがあります。 新しいプロジェクトのASP.NET.Webアプリケーションを選んでツールボックスのHTMLのButtonでボタンを作成しましたが、このボタンが押された時に JavaScriptの関数が呼ばれ、他のテキストフールドのチェックを行いたいのですが このJavaScriptの関数の記述をこのボタンのプロパティやコードのどこに記述すれば それが出来るのでしょうか? 又、このボタンをダブルクリックすると「HTMLサーバコントロールに変換する 必要があります」とエラーになります。 これはどういうことでしょうか? |
|
投稿日時: 2003-11-11 13:50
HTMLコントロールの場合は、デザイナの下のタブでHTMLに切り替え、HTML上に記述します。
ダブルクリックすると、サーバ側コード(ビハインドコード)にメソッドを作成しようとします。そのため、サーバコントロールに変更しなければなりません。 仕方は、HTML表示に切り替え、属性にrunat="server"を追加します。次にソリューションエクスプローラで、aspxファイルを右クリックし、「コードを表示」を選択します。出てきたビハインドコードで、regionによって折りたたまれているところにコントロールの宣言がかたまっていますから、そこに先ほどのHTMLコントロールを追加します(HTMLコントロールは自動追記されない)。後はエディタの左上にあるドロップダウンからコントロール名を選び、右上のドロップダウンからイベントを選ぶと、コードが追加されます。HTMLコントロールは、メソッドを自分で追加しなければならないかもしれません。 |
|
投稿日時: 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分を追加する) こんな解釈で宜しいでしょうか? |
|
投稿日時: 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: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') にすればよいのでしょうか? |
|
投稿日時: 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-12 12:00
RESありがとうございました。
詳しいご説明頂き理解できました。 やはりHTMLコントロールを使うと開発時にはかなり面倒なんですね。 それで、最後になるかと思いますが、従来のASP開発では クライアントサイドでチェックや設定できる内容はJavascriptで対応し サーバサイドでないと出来ない処理はサーバへのイベント通知で行っていましたが .NETではこの考え方を多少変える必要があるのでしょうか? すべてWebコントロールを使いサーバサイドのイベント時にチェック処理を 行うのが開発が楽なような気がします。 この辺のご意見をお聞かせください。 |
|
投稿日時: 2003-11-12 12:25
アンカーコントロールがない、というスレッドの方、レスついていませんが、これはWebControlのHyperLinkが該当すると思います。
プロパティウインドウの「runat」の項目がdisabledになっていることや、当然ですがHTMLの要素としては「runat」という属性はありませんので、HtmlControlはクライアントでのみ処理する、と考えるのが妥当なのでしょう。ただし、パスワードコントロールなど、一部のコントロールについては該当するWebControlがありません。これらについて値を参照するために、サーバサイドコードで処理できる、ということでしょうか。 |
1