none
runat="server"以外に何があるのですか? RRS feed

  • 質問

  • コードにrunat="server"となにかにつけて記述しますがserver以外に何があるのでしょうか?

    client?でしょうか?

    その場合どこにどうやってスクリプトを記述すればいいのかご存知の方いらっしゃいましたら教えていただけましたら幸いです。

    2010年6月17日 2:41

回答

  • 確証は見つけられませんでしたが、server以外は無いと思います。と言いますか、serverかそれ以外だと思います。例えば次のobjcetタグの説明にそのような記述を見つけることができます。また、インテリセンスにもserver以外出てきませんね。

    サーバー側オブジェクト タグ構文
    http://msdn.microsoft.com/ja-jp/library/h8k45y06(VS.80).aspx

    元々runat="server"はサーバーサイドでコントロールを扱えるようにするための指示ですので、サーバーサイドかクライアントサイドかの2つに一つなのでしょう。

    なお、runat="server"を指定しなかった場合はクライアントサイドで操作することになりますから、javascriptなどを使うことになります。ASP.NETを使用しない普通のHTMLのWebページと同じです。例えば、

    <input type="text" id="textbox">

    であれば、javascriptなどで操作し、

    <input type="text" id="textbox" runat="server">

    であればASP.NETで操作します。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2010年6月17日 4:40
    モデレータ

すべての返信

  • 確証は見つけられませんでしたが、server以外は無いと思います。と言いますか、serverかそれ以外だと思います。例えば次のobjcetタグの説明にそのような記述を見つけることができます。また、インテリセンスにもserver以外出てきませんね。

    サーバー側オブジェクト タグ構文
    http://msdn.microsoft.com/ja-jp/library/h8k45y06(VS.80).aspx

    元々runat="server"はサーバーサイドでコントロールを扱えるようにするための指示ですので、サーバーサイドかクライアントサイドかの2つに一つなのでしょう。

    なお、runat="server"を指定しなかった場合はクライアントサイドで操作することになりますから、javascriptなどを使うことになります。ASP.NETを使用しない普通のHTMLのWebページと同じです。例えば、

    <input type="text" id="textbox">

    であれば、javascriptなどで操作し、

    <input type="text" id="textbox" runat="server">

    であればASP.NETで操作します。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2010年6月17日 4:40
    モデレータ
  • trapemiyaさんご回答ありがとうございます。

    無いとは・・・・

    試しにasp.net のテキストボックスに入力されている数値をボタンをクリックしたら数字が上がるものを作ってみました。

    いちいち更新されるのが嫌なのでjavascriptでこんな風につくりました。

    function Button1_onclick() {
                var a = document.getElementById('TextBox1').value * 1;
                document.getElementById('TextBox1').value = a + 1;
            }

    見た目は数値が変わっているのですが

    変更した後の値をコードから取得しようとしましたが変更前の値が取得されてしまいます。

    また、htmlのテキストボックスの値をコード側から設定しようとしても

    現在のコンテキスト内に存在しません。

    と言われてしまいます。

    更新せずにこれらができる方法は無いものでしょうか?

    2010年6月17日 6:16
  • TextBox1はaspタグ項目なのでしょうか?

    またrunat="server"は記載されておりますか?

    Button1がクリックされた後に、サーバーサイド側へPostBackする処理はございますか?

    前の質問になりますが、クライアントサイドで処理を実行する場合、質問のようなコードをHTMLに記載する場合と、ソースコード(サーバーサイド)で、

    Button1.Attributes.Add("onclick", スクリプト文字列)のように記載して、Javaスクリプトを設定します。

    2010年6月17日 6:59
  • > 更新せずにこれらができる方法は無いものでしょうか?

    「更新」というのは、ポストバックして画面全体が再描画されることを
    意味していると思いますが、それがイヤなら ASP.NET AJAX を使って必
    要な部分のみ更新したらどうですか?

    AJAX を使わずに、JavaScript との組み合わせで何とかということでし
    たら、もう少し詳しく何をしたいか書いてください。解決策が提案でき
    るかもしれません。

    2010年6月17日 13:03
  • NABEbabyさんご回答ありがとうございます。

    ご心配していただいている状況は問題ないです。

    javascriptのアドバイスありがとうございます。

     

    SurferOnWwwさんご回答ありがとうございます。

    もう少し詳しく何をしたいかの点については上記の事をしたいのですが

    とりあえずもう少し簡単なところからいきますと

    ASPのテキストボックスを二つ用意して

    ひとつのテキストボックスに入力された値をもう一つの方に入れるところを考えています。

    これをボタンを配置してこれをクリックしたタイミングではなく

    例えばテキストボックスにあるフォーカスが外れた後のタイミング(もしくはこれに類似するようなタイミング)で

    コピーできればと考えています。

     

     protected void TextBox1_TextChanged(object sender, EventArgs e)
        {
            TextBox2.Text = TextBox1.Text;
        }

     

    こんな感じでやってみましたが何も変化ありませんでした。再描画さえありません。

    アドバイスいただけましたら幸いです。

    2010年6月18日 2:05
  • サーバで動作するプログラム(ASP.NET)とクライアントで動作するプログラム(JavaScript)をどう切り分けて実装したいのか、十分に考えてみてください。
    ごっちゃにして考えても動くものなんてできません。

    サーバで動作するプログラム(ASP.NET)が動くためにはサーバへのPOSTが必要になります。
    それをJavaScriptでページの更新をさせず、裏側で実行することは可能ではありますが、その場合通常のASP.NETとは別に処理を記述することになります。

    極小テックさんが書いているサンプルについて言うと、直前のTextBoxのテキスト変更については、JavaScriptで操作するのが普通でしょう。
    サーバ側にデータがあがってこない状態ではASP.NETでの処理は絶対に動作するはずがありません。

    その前のJavaScriptで書いたクリック数の変更については、数の変更後、サーバ側でデータを取得しようとしてうまくデータが取れていないのだと思いますが、これはPostBack時、ViewStateに含まれている更新前の数字をとってきてしまっているのではないかと思います。

    まずは、サーバ側で動くプログラムとクライアント側で動くプログラムの区別と、その実行タイミングについてよく考えてみることをおすすめします。


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)
    • 回答の候補に設定 山本春海 2010年6月28日 8:04
    2010年6月18日 7:16
  • > もう少し詳しく何をしたいかの点については上記の事をしたいのですが

    それだけでは全体のシナリオが分からないので聞きました。全体的にどの
    ようなシナリオで何をしたいか書いてください。部分的な情報だけでは回
    答が的外れになりがちですので。

    > とりあえずもう少し簡単なところからいきますと

    それはやりたいこととは違いますよね。やりたいことを書いてもらって、
    それを実現するにはどうするかを議論しませんか。

    ボタンクリックでポストバックせずテキストボックスに表示される数を
    増加させたいというのは先のレスでわかりましたが、その先のステップ
    を具体的にどうしたいのですか?

    2010年6月18日 14:01
  • 小野さんのレスで、

    > これはPostBack時、ViewStateに含まれている更新前の数字をとってきてしまっている
    > のではないかと思います。

    とのことですが、TextBox1 がサーバーコントロールの TextBox であれば、JavaScript
    で value に設定した値は、ポストバックしてサーバー側のコードで TextBox1.Text プ
    ロパティを使って取得できるはずです。

    質問者さんのレスの以下の部分を、実際にコードを書いて検証して見ました。

    > いちいち更新されるのが嫌なのでjavascriptでこんな風につくりました。
    >
    > function Button1_onclick() {
    >            var a = document.getElementById('TextBox1').value * 1;
    >            document.getElementById('TextBox1').value = a + 1;
    >        }
    >
    > 見た目は数値が変わっているのですが
    > 変更した後の値をコードから取得しようとしましたが変更前の値が取得されてしまいます。

    たぶん、やり方の問題でしょう。 以下のコードでは間違いなく取得できます。お試し
    ください。

    <%@ Page Language="C#" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <script runat="server">
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                return;
            }
            Label1.Text = TextBox1.Text;
        }
    </script>

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:TextBox ID="TextBox1" runat="server" />
            <asp:Button ID="Button1" runat="server"
                Text="Increment"
                OnClientClick="Button1_onclick(); return false;" />
            <br />
            <asp:Button ID="Button2" runat="server"
                Text="Submit and Show Result" />
            <br />
            Result: <asp:Label ID="Label1" runat="server" />
        </div>
        </form>
    </body>
    </html>
    <script type="text/javascript">
        //<![CDATA[
        function Button1_onclick() {
            var a = document.getElementById('TextBox1').value * 1;
            document.getElementById('TextBox1').value = a + 1;
        }
        //]]>
    </script>

    2010年6月19日 1:41