- PR -

JavaScriptでセットした値がSubmitするとなくなる

投稿者投稿内容
mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2004-03-01 16:09
引用:

msoさんの書き込み (2004-03-01 15:44) より:

すいませんが教えてください。
大変申し訳ありませんが、「サーバコントロールとして実行」は
どうやってやるのでしょうか?
VS2002の中をあちこち探してみたのですが、
見つけることが出来ませんでした。




「サーバコントロールとして実行」にチェックをつけたり、
はずしたりしたのですが、JavaScriptでデータをセットすることは出来ませんでした。

またチェックをつけた状態ではサーバサイドでデータをセットすることは出来ました。
#この場合のサーバサイドってのはC#で値をセットってことでOKですよね?
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2004-03-01 16:15
>msoさん
実現したいのは「HTMLページ→ASPXページ」「ASPXページ→同じASPXページ」
どちらでしょうか?(根本は同じですが)
「ASPXページ→違うASPXページ」ではないですよね?

私のところで、msoさんが最初に提示したソースを少し変えて実験してみましたが、
「HTMLページ→ASPXページ」「ASPXページ→同じASPXページ」どちらの場合でも
Request.Param["test_1"]で値が[a]になっています。「HTMLページ→ASPXページ」は
Fromにactionを設定しただけです。「ASPXページ→同じASPXページ」はVS.NETで
自動生成された状態から<script>の内側と<form>の内側をコピペしました。

中ほどの例でhiddenのvalueに[test]と設定しているのはhtmlソース上で行って
いるのですよね?
Request.Paramがあるまさにその行でブレークしてみてもだめですか?

追記:IE6で実験しました

[ メッセージ編集済み 編集者: べる 編集日時 2004-03-01 16:43 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-03-01 16:40
引用:

msoさんの書き込み (2004-03-01 16:09) より:

#この場合のサーバサイドってのはC#で値をセットってことでOKですよね?


セットだけでなく、取得もできます。

例えば、<input type="hidden" runat="server" id="hdnInput">とすると、サーバ側ではSystem.Web.UI.HtmlControls.HtmlInputHiddenだったかな?のクラスで、hdnInputが作成されます。Loadイベントハンドラ内で、これに値が返ってきていると思うのですが、確認してみてください。
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2004-03-01 16:56
ども、ほむらです。
-------
mso氏へ
引用:

んー、コピペでボンってのが私も楽でいいですし、
回答していただいている皆様にもいいのはわかるのですが、
やっぱりちょっとそれはできないんですよ・・・すいません。


あっごめんなさい。誤解を招く書き方だったようですね^^;;
ここでいいたかったのは、書き直しということを言いたかったのです。
書き直すと同じはずのコードが動いたりもしますし(笑

>実際にはURLは http://url?a=A  というようになっていました。
実はこの時点でおかしいですよね。
コード:
<form action="#" method="get">
  <input type="submit" value="submit">
  <input type="hidden" id="a" name="a" value="A">
  <input type="hidden" id="b" name="b" value="">
</form>


やってもらうとわかると思いますが空白であってもQueryStringは送信されるはずです。
(hiddenならばの話)

代入とalert()の部分だけでもソース載せることができませんか?

あと、ブラウザはIEでよいのでしょうか?.NETだし。。。
エラーとか出ていてスクリプトが途中で止まってませんか?
IDは重複とかしてませんよね?
mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2004-03-01 17:00
msoです。

引用:

べるさんの書き込み (2004-03-01 16:15) より:
実現したいのは「HTMLページ→ASPXページ」「ASPXページ→同じASPXページ」
どちらでしょうか?(根本は同じですが)
「ASPXページ→違うASPXページ」ではないですよね?


私が実現したいのは
「ASPXページ→同じASPXページ」
の動作です。


引用:

中ほどの例でhiddenのvalueに[test]と設定しているのはhtmlソース上で行って
いるのですよね?
Request.Paramがあるまさにその行でブレークしてみてもだめですか?

追記:IE6で実験しました

[ メッセージ編集済み 編集者: べる 編集日時 2004-03-01 16:43 ]


中ほどの例はhtmlのソースで実行しています。
また、Request.Paramがあるその行でブレークしているのですが、
中身は空のままです。



(思いつきですし、まだ実験していません)
あまり知らないなりにちょっと推測をしてみました。
何かおかしいところなどがあれば指摘してください。
今回、SubmitしてもRequest.Paramsに出てこないのは
PostBackが動作しているためRequest.Paramsのデータが
変わらないから。
なので、全体の動きを気にしないという前提であれば、
すべてのタグからrunat="server"を出来るだけはずして
実行するとRequest.ParamsのところでPostBack以外のところから
データを取得できるのではないか?
ただ、runat="server"をはずしたときの影響は現状わからず。
(かなり甚大と予想)

実験したほうがいいのかなぁ。
ほかの方法を探そうかなぁ。

mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2004-03-01 17:13
msoです。

引用:

Jittaさん>
データは取得も出来ました。
#ブレークさせたときに確認。



引用:

ほむらさんの書き込み (2004-03-01 16:56) より:
ども、ほむらです。
-------
あっごめんなさい。誤解を招く書き方だったようですね^^;;
ここでいいたかったのは、書き直しということを言いたかったのです。
書き直すと同じはずのコードが動いたりもしますし(笑



なるほど。。。。
確かにおっしゃるとおりです。
そういうことありますね。
書き直し・・・・(汗


引用:


>実際にはURLは http://url?a=A  というようになっていました。
実はこの時点でおかしいですよね。
コード:
<form action="#" method="get">
  <input type="submit" value="submit">
  <input type="hidden" id="a" name="a" value="A">
  <input type="hidden" id="b" name="b" value="">
</form>


やってもらうとわかると思いますが空白であってもQueryStringは送信されるはずです。
(hiddenならばの話)




そうなんですよね。
空でもQueryStringが出てくるはずと認識しているのに、
出てこないのがすごく気になっています。
ひょっとしてフレームの中でSubmitさせているから、
フレームをコールしたときのQueryStringをずっと使っているのかなぁ・・・?
#すいません、もっと早く言えばよかったのに黙っていました。

引用:


代入とalert()の部分だけでもソース載せることができませんか?




・変数の名前を変更
・ちょっと代入している変数の数をちょっと削除
上の二つをやっていますが、あとはそのまんまです。
代入をして、そのままAlertさせています。

代入&Alertの部分
コード:
function TransferProjApplication(aryParaData)
{
	//hidden項目にセットする
	document.all['test001'].Value   = unescape(window.dialogArguments[0]);
	alert(document.all['test001'].Value);//debug
	document.forms[0].submit();
	return;
}



引用:

あと、ブラウザはIEでよいのでしょうか?.NETだし。。。
エラーとか出ていてスクリプトが途中で止まってませんか?
IDは重複とかしてませんよね?



ブラウザはIE6.0を使っています。
JavaScriptのエラーなどは出ていません。
IDの重複もないです。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-03-01 17:55
引用:

msoさんの書き込み (2004-03-01 17:13) より:

データは取得も出来ました。
#ブレークさせたときに確認。

(略)

空でもQueryStringが出てくるはずと認識しているのに、
出てこないのがすごく気になっています。



 ポストバックデータとして受け取れているのに、リクエストには上がっていない、ということ?
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2004-03-01 17:58
ほむらです。
--------
原因発覚した模様。。。
大文字小文字区別するので注意。
>document.all['test001'].Value = unescape(window.dialogArguments[0]);
Valueではなくてvalueです。

エラーにならないのはValueという新しいプロパティが暗黙的に作成されているためです。
確認方法としてhiddenではなくてtextにするとわかります。
値が書き換わらないはずです。

#うそついていたらごめんなさい。

#以下追記
#仮に、僕の予想があっていたとしてなぜQueryStringには含まれなかったのだろう。
#test001=の形くらいは入るはずなのに。

[ メッセージ編集済み 編集者: ほむら 編集日時 2004-03-01 18:03 ]

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