トップ回答者
runat="server"以外に何があるのですか?

質問
回答
-
確証は見つけられませんでしたが、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/- 編集済み trapemiyaModerator 2010年6月17日 4:42 インテリセンスについて追記
- 回答の候補に設定 山本春海 2010年6月21日 5:11
- 回答としてマーク 極小テック 2010年6月30日 12:49
すべての返信
-
確証は見つけられませんでしたが、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/- 編集済み trapemiyaModerator 2010年6月17日 4:42 インテリセンスについて追記
- 回答の候補に設定 山本春海 2010年6月21日 5:11
- 回答としてマーク 極小テック 2010年6月30日 12:49
-
trapemiyaさんご回答ありがとうございます。
無いとは・・・・
試しにasp.net のテキストボックスに入力されている数値をボタンをクリックしたら数字が上がるものを作ってみました。
いちいち更新されるのが嫌なのでjavascriptでこんな風につくりました。
function Button1_onclick() {
var a = document.getElementById('TextBox1').value * 1;
document.getElementById('TextBox1').value = a + 1;
}見た目は数値が変わっているのですが
変更した後の値をコードから取得しようとしましたが変更前の値が取得されてしまいます。
また、htmlのテキストボックスの値をコード側から設定しようとしても
現在のコンテキスト内に存在しません。
と言われてしまいます。
更新せずにこれらができる方法は無いものでしょうか?
-
NABEbabyさんご回答ありがとうございます。
ご心配していただいている状況は問題ないです。
javascriptのアドバイスありがとうございます。
SurferOnWwwさんご回答ありがとうございます。
もう少し詳しく何をしたいかの点については上記の事をしたいのですが
とりあえずもう少し簡単なところからいきますと
ASPのテキストボックスを二つ用意して
ひとつのテキストボックスに入力された値をもう一つの方に入れるところを考えています。
これをボタンを配置してこれをクリックしたタイミングではなく
例えばテキストボックスにあるフォーカスが外れた後のタイミング(もしくはこれに類似するようなタイミング)で
コピーできればと考えています。
protected void TextBox1_TextChanged(object sender, EventArgs e)
{
TextBox2.Text = TextBox1.Text;
}こんな感じでやってみましたが何も変化ありませんでした。再描画さえありません。
アドバイスいただけましたら幸いです。
-
サーバで動作するプログラム(ASP.NET)とクライアントで動作するプログラム(JavaScript)をどう切り分けて実装したいのか、十分に考えてみてください。
ごっちゃにして考えても動くものなんてできません。サーバで動作するプログラム(ASP.NET)が動くためにはサーバへのPOSTが必要になります。
それをJavaScriptでページの更新をさせず、裏側で実行することは可能ではありますが、その場合通常のASP.NETとは別に処理を記述することになります。極小テックさんが書いているサンプルについて言うと、直前のTextBoxのテキスト変更については、JavaScriptで操作するのが普通でしょう。
サーバ側にデータがあがってこない状態ではASP.NETでの処理は絶対に動作するはずがありません。その前のJavaScriptで書いたクリック数の変更については、数の変更後、サーバ側でデータを取得しようとしてうまくデータが取れていないのだと思いますが、これはPostBack時、ViewStateに含まれている更新前の数字をとってきてしまっているのではないかと思います。
まずは、サーバ側で動くプログラムとクライアント側で動くプログラムの区別と、その実行タイミングについてよく考えてみることをおすすめします。
あおい情報システム株式会社 小野修司(どっとねっとふぁん)- 回答の候補に設定 山本春海 2010年6月28日 8:04
-
> もう少し詳しく何をしたいかの点については上記の事をしたいのですが
それだけでは全体のシナリオが分からないので聞きました。全体的にどの
ようなシナリオで何をしたいか書いてください。部分的な情報だけでは回
答が的外れになりがちですので。> とりあえずもう少し簡単なところからいきますと
それはやりたいこととは違いますよね。やりたいことを書いてもらって、
それを実現するにはどうするかを議論しませんか。ボタンクリックでポストバックせずテキストボックスに表示される数を
増加させたいというのは先のレスでわかりましたが、その先のステップ
を具体的にどうしたいのですか? -
小野さんのレスで、
> これは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>