• ベストアンサー

サーバーコントロールについて

asp.net 超初心者です。 サーバーコントロールについてなのですが、例えば: <asp:Table ID="Table1" runat="server"> と普通のHTMLの<table>の違いは何なのでしょうか? 自分が思うに、おそらく、サーバーコントロールの方は、 サーバー側で生成され、普通のHTMLの方はクライアント側で 生成され・・・みたいな感じだと思うのですが、、、 サーバーコントロールでしか使えないようなものならともかく、 HTMLでも記述できるものをわざわざサーバーコントロールで 記述する理由は何ですか? また、サーバーコントロールを多用することで、サーバーに負担を かける、ということはないのでしょうか? ご回答、宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • Yeti21
  • ベストアンサー率47% (396/830)
回答No.1

例えば、存在するデータなどによってテーブルの構成が複雑な場合、 htmlのtableでもできないことは無いですが、記述が結構大変だったりします。 tableクラスを使用すると比較的簡単に記述できるというのがメリットじゃないかと思います。 コントロールなのでメソッドやプロパティで簡単に設定できるのが便利です。 つまり、プログラム的に扱いやすいということです。 負荷に関しては、それほど気にすることは無いと思います。

iwaiwaiwa
質問者

補足

ご回答ありがとうございます。 もう少し、疑問があるので、質問させてください。 確かにご指摘の通り、サーバーコントロールの方が HTMLで記述した時よりもXHTML 1.0の文法などを意識しなくても 良いような気がします。 でも、これだと、asp.netが入っている環境でのみしか 利用できないんですね。例えば、特定のページだけHTML で作成するという時に、VSだとDreamweaver等よりもかなり 非効率になってしまうのですね。 こういう部分というのは割り切ってしまって良いものでしょうか? asp.netで作ったものを、将来的に他の環境に対応させる時 (そういう必要が生じるかは別として)作り直しになってしまうの では?と思うのですが。 お手数ですが、ご意見お願いします。

その他の回答 (2)

回答No.3

ASP.NET 用のサーバ コントロールをあえて使う場面なのであれば、そのページは ASP.NET に特化したページでしょうから、他のサーバ システムに乗り換える話はナンセンスかと。 同じ話は PHP など別の Web アプリ環境でも言えます。 サーバ コントロールを使わなくても済むのにサーバ コントロールを使うのは何故なのか? という意味でしたら、「サーバ コントロールを何故使うのかと何故聞くのか?」と逆に質問したいです。 HTML コントロールを使えばいいし、*.aspx ファイルじゃなくて *.html ファイルを作成すれば良いのでは? Visual Studio は単純な HTML のエディタとしても十分に使用可能です。

  • Yeti21
  • ベストアンサー率47% (396/830)
回答No.2

ちょっと観点が違うようです。 ASP.NETが環境の前提であっても何ら問題にはなりません。 企業サイトのWebシステムというのはそういうものです。 まず、環境ありきで、その環境に応じて開発することが多いです。 もし、ASP.NETではない環境に移行するのであれば、仰る通り全部作り直しと いうわけですが、そこに躊躇はありません。 (もっと重要な企業戦略が根底にあります) もちろん、その環境を選択するまでには紆余曲折が有ることもあります。 今(もちろん多少の将来も考慮に入れますが)どういう環境でシステムを 開発するのが目的を達成するのに効果的かが最も重要になってきますね。

関連するQ&A

  • EmptyDataTemplateを再表示

    EmptyDataTemplateのラベル値を画面のLinkButtonのクリック時に変更したいと思っています。 LinkButtonのクリック時に以下の通り記述することで、値はセットされているのですが、 画面上で再表示されません。 UpdatePanelでトリガーも設定しているのですが、どうすればよいでしょうか? <サーバー側> Protected Sub btnON_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnON.Click If grdList.Rows.Count = 0 Then CType(grdList.Controls(0).Controls(0).FindControl("emptyName"), Label).Text = "説明A" End If End Sub <クライアント側> <asp:LinkButton ID="btnON" runat="server"><asp:Label ID="lblON" Text="ボタン1" runat="server" /></asp:LinkButton> <div id="Data" runat="server"> <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional"> <ContentTemplate> <asp:GridView ID="grdList" runat="server" ~省略~ > <%-- データがない場合 --%> <EmptyDataTemplate> <table > <tr> <th><asp:Label ID="emptyNo" Text="NO" runat="server" /></th> <th><asp:Label ID="emptyName" Text="説明○" runat="server" /></th>   ☆ここの値 </tr> </table> </EmptyDataTemplate> <Columns> ~データ表示省略~ </Columns> </asp:GridView> </ContentTemplate> <Triggers> <asp:AsyncPostBackTrigger ControlID="btnON" EventName="Click" /> </Triggers> </asp:UpdatePanel> </div>

  • 【ASP.NET】 ログインコントロールにおいて

    おせわになります。 Visualstudio 2005 のASP.NET VB でWEBサイトを作成しております。 ASP.NET  で ログインコントロールを使って、認証ページを作っているのですが。 ID PASSWORD この2つのIDをログインコントロール内で、使用しているのは分かるのですが、 このIDに加え ID 名前 PASSWORD という3つのデータによって、ログイン制御を行いたいと考えております。 ログインコントロール内で、テーブルを追加して、「名前」を増やした所、 このIDをVB.NET側で、受け取れません。 ASP.NET 側の ログインコントロールのソースは /////// ここからが問題の箇所 ///////////// <tr> <td align="right" style="height: 24px; width: 149px;"> <asp:Label ID="Label2" runat="server" AssociatedControlID="USERID">ID: </asp:Label></td> <td style="height: 24px; width: 312px;"> <asp:TextBox ID="USERID" runat="server" MaxLength="5" OnTextChanged="USERID_TextChanged" Width="152px"> </asp:TextBox> <asp:RangeValidator ID="RangeValidator1" runat="server" ControlToValidate="USERID" ErrorMessage="ユーザーIDは5文字以下にしてください。" ToolTip="ユーザーIDは10文字以下にしてください" Type="String" ValidationGroup="Login1">*</asp:RangeValidator> </td> </tr> /////// ここまでが問題の箇所 //////////// /////// ここからは通常に起動 ///////////// <tr> <td align="right" style="height: 24px; width: 149px;">  <asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">氏名(カナ):</asp:Label></td> <td style="height: 24px; width: 312px;"> <asp:TextBox ID="UserName" runat="server" Width="152px" OnTextChanged="UserName_TextChanged" MaxLength="10"> </asp:TextBox> <asp:RangeValidator ID="UserNameRequired" runat="server" ControlToValidate="UserName" ErrorMessage="ユーザー名は10文字以下にしてください。" Type ="String" ToolTip="ユーザー名は10文字以下にしてください" ValidationGroup="Login1"> *</asp:RangeValidator> </td> </tr> <tr> <td align="right" style="height: 29px; width: 149px;"> <asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">パスワード: </asp:Label> </td> <td style="width: 312px; height: 29px;"> <asp:TextBox ID="Password" runat="server" TextMode="Password" Width="152px"> </asp:TextBox> <asp:RequiredFieldValidator ID="PasswordRequired" runat="server" ControlToValidate="Password" ErrorMessage="パスワードが必要です。" ToolTip="パスワードが必要です。" ValidationGroup="Login1"> * </asp:RequiredFieldValidator> </td> </tr> <tr> <td align="center" colspan="2" style="color: red"> <asp:Literal ID="FailureText" runat="server" EnableViewState="False"></asp:Literal> </td> </tr> VB.NET 側では以下のスクリプトで指定しています。 Protected Sub LoginButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Login1.LoggedIn ////////// 受け取れない ////////////////// Dim strID As String = Login1.UserID.ToString ////////// 受け取れる ////////////////// Dim strID As String = Login1.UserName.ToString ////////// 受け取れる ////////////////// Dim strID As String = Login1.Password.ToString このように、LOGIN コントロールに UserIDを追加できません。 よって、session などに、 UserID のVALUE を受け取れるようにしたいのですが、 asp.net側の 設定はどのようにしたらよろしいのでしょうか。 ログインコントロールは あきらめて、通常の独自の認証システムを作るべきですかね。 ログインコントロールに 通常のテキストボックスとして、追加はできないものでしょうか。 どなたかご存知の方、いらっしゃいましたら、教えていただけますと幸いです。 どうぞ宜しくお願いいたします。

  • Buttonの処理について

    aspのButtonの処理をクライアント側(javascript)だけで実行出来ますか? 出来る場合、どのような記述をすればいいでしょうか? <asp:Button ID="btnHenko" runat="server" Text="実行" OnClientClick=" btn_Click" UseSubmitBehavior="false" だけ記述したところ、サーバー側の処理が走ってしまいます。

  • サーバコントロールのコントロールIDをjavaScriptの引数として

    サーバコントロールのコントロールIDをjavaScriptの引数として渡したい <a href="#tab1" id="test" runat="server" onclick="change('test.ClientID');">テスト</a> とした際にサーバコントロールをjavaScriptの引数として渡したいのですが・・・ 書き方がわかりません。 どなたかご指導ご鞭撻下さい。

  • サーバ上でActiveXコントロールのオブジェクトを生成し、VBScr

    サーバ上でActiveXコントロールのオブジェクトを生成し、VBScriptからメソッド呼 び出しを行うため、下記のようなプログラムを作成しました。 [test.asp] <html xmlns="http://www.w3.org/1999/xhtml" > <head> <meta http-equiv="Content-Type" content="text/html; charset=x-sjis"/> <meta name="GENERATOR" content="Microsoft Visual Studio 6.0"/> </head> <body> <OBJECT id=Test1 style="LEFT: 0px; VISIBILITY: hidden; TOP: 0px" codeBase=Test.ocx#version=4,0,0,0 type=application/x-oleobject classid=clsid:XXXX runat="server"> </OBJECT> <script language=vbscript runat="server"> Response.Write(Request.Form(input1)) Test1.TestCall(Request.Form(input1)) </script> <script language=vbscript> Sub test1() Document.Testform.submit() End Sub </script> <form name="Testform" action="test.asp"method="POST"> <input style="width: 143px; height: 75px" type="button" name="button1" onclick="test1"/> <input type="hidden" name="input1" value=" "/> <!--ここにユーザ入力値を入れ る--> </form> </body> </html> Test.ocxは公開メソッドとして、ユーザ入力値を引数に持つ"TestCall"を持っていま す。 サーバ側でregsvr32 Test.ocxでレジストリ登録して、そのクラスIDを<OBJECT>タグ で指定しています。 これをクライアントから http://servername/test.asp で開くと、そのまま応答がなくなります。 VBScriptでTest.ocxのメソッドを使用している部分を削除すれば、普通にレスポンス が帰ってきます。 (Response.Write(Request.Form(input1))の結果が正しく表示されている) input1にはユーザ入力値を入れる処理をVBScriptで実装していますが、上記では省略 しています。 何か設定等足りないところがあるのでしょうか? Test.ocxのインスタンス生成に失敗しているような感じがします。 インスタンスはこのページがロードされたときにサーバ側で生成されるものと理解し ていますが、正しいでしょうか? なお、これと同じことをクライアントサイドで行った場合、正常にTest.ocxのメソッ ドをコールできています。 (<object>タグと<script>タグでrunat="server"を削除。) やりたいことは、ユーザーが入力したフォームデータをsubmit()して、サーバ上で ActiveXオブジェクトを生成して、VBScriptからActiveXの公開メソッドを呼び出し、 その中からさらにサーバ上の別プログラムを呼び出し、処理結果を受けてVBScriptへ 処理を戻し、結果をASPで処理してクライアントに返したいのです。 普通のWebアプリケーションとほぼ同じだと思いますが、ActiveXコントロールから別 のプログラム(レガシーアプリ)へはPostMessageで要求を投げているので、結果が 自身にPostされるまでSleepしてからVBScriptに処理を戻すという形にしようとして います。 サーバ環境はWindows Server 2003 + IIS6.0、クライアントはWindows XP Professional SP3 + IE6.0です。 リモートデバッグの仕方が分からず苦労しています。

  • サーバ側でオートコンプリート機能をOFFにするには

    ASP.NET2010でログイン画面を作成しています。 以下の通り、htmlを記述してもログイン欄(TXT_User)とパスワード欄(TXT_Pass)の オートコンプリート機能を無効にすることができません。 <asp:textbox style="IME-MODE: disabled" id="TXT_User" runat="server" AutoCompleteType="Disabled"</asp:textbox> <asp:textbox id="TXT_Pass" runat="server" AutoCompleteType="Disabled" TextMode="Password"></asp:textbox> ちなみにIE11で動作させようとしています。 サーバ側でブラウザのオートコンプリート機能をOFFする方法を教えて頂けないでしょうか? 宜しくお願いします。

  • クリックしたボタンのIDの取得

    あるプログラムをASP.NETとC#で作っています。 ASP側に、 <asp:ImageButton ID="btn1" runat="server" onclick="btn_Click" /> <asp:ImageButton ID="btn2" runat="server" onclick="btn_Click" /> <asp:Label ID="label1" runat="server" Text=""></asp:Label> とある場合に、btn1とbtn2、押された方のID名をlabel1に表示するには、btn_Clickイベントにはどう書けば良いでしょうか?

  • htmlでコンボボックスのパラメータを指定したい

    環境 asp.net htmlでコンボボックスをセットしています。 以下のDefaultValueの値をコントロール名にしたいのですがどのように記述すればよいのでしょうか? <asp:SqlDataSource ID="sqlddl1" runat="server" ConnectionString="<%$ ConnectionStrings:xxxConnectionString %>" SelectCommand="SELECT CD, NAME FROM TABLE WHERE (CD = @CD)"> <SelectParameters> <asp:Parameter DefaultValue="123" Name="CD" Type="String" /> </SelectParameters> </asp:SqlDataSource>

    • ベストアンサー
    • HTML
  • 複数チェックボックスの判定について教えてください。

    複数チェックボックスの判定について教えてください。 こんな感じになっているのですがもし「2つ以上」チェックがついていたらという基準を設けたいのですが どのように書いたらいいでしょうか? <td> <asp:CheckBox ID="CheckBox1" runat="server" /> </td> <td> <asp:CheckBox ID="CheckBox4" runat="server" /> </td> <td> <asp:CheckBox ID="CheckBox7" runat="server" /> </td> </tr> <tr> <td> <asp:CheckBox ID="CheckBox2" runat="server" /> </td> <td> <asp:CheckBox ID="CheckBox5" runat="server" /> </td> <td> <asp:CheckBox ID="CheckBox8" runat="server" /> </td> </tr> <tr> <td> <asp:CheckBox ID="CheckBox3" runat="server" /> </td> <td> <asp:CheckBox ID="CheckBox6" runat="server" /> </td> <td> <asp:CheckBox ID="CheckBox9" runat="server" /> </td>

  • ASP.NET WEBアプリケーションで作成されたページより他の既存ペ

    ASP.NET WEBアプリケーションで作成されたページより他の既存ページへデータを投げたいと考えているのですがセキュリティ上難しいのでは?と考えています。しかし、なんとか代替案がないかと思っておりどなたかヒントをいただけないでしょうか? <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> <asp:TextBox ID="TextBox3" runat="server" Height="72px" TextMode="MultiLine" Width="651px"></asp:TextBox> <br /> <asp:Button ID="Button1" runat="server" Text="Button" />&nbsp;&nbsp; <asp:Button ID="Button2" runat="server" Text="Button" /> <br /> <br /> <asp:Label ID="Label1" runat="server"></asp:Label> 例えばこんな簡単なaspxのページで構成されているとします。 テキストボックスに入れた値を既存のWEBページ(Yahooへのログインだとか)へ入れ込みたいのですが・・・クライアントにスクリプトで作ってとかなら余裕で出来ると思うのですがサーバサイドで仕込むことは難しいでしょうか?回避策とかもあるとなおうれしいのですが・・・よろしくお願いします。

専門家に質問してみよう