- PR -

POSTパラメータの送信について

投稿者投稿内容
くろ
会議室デビュー日: 2005/03/01
投稿数: 13
投稿日時: 2005-10-29 20:03
いつもお世話になっております。

ASP.NETで作成したページから、ある別のページ(既存システムでASP.NETではないページ)にPOSTパラメータを渡したいと考えています。
ASPXファイルにINPUTタグを作成し、hidden属性にパラメータを指定して試してみたところ、FORMタグのaction属性が自動的に自分自身のページを指してしまうため、うまく別のページに渡すことができません。
ASP.NETでPOSTパラメータを別のページに渡すことはできるでしょうか。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2005-10-29 23:36
<form>タグに runat="server" を書かなければできます。ただしそのFormでは
ASP.NETの様々な恩恵を受けられません。

あとは、submitする瞬間にjavascriptでactionを書き換える、とか。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-10-30 16:36
引用:

べるさんの書き込み (2005-10-29 23:36) より:
<form>タグに runat="server" を書かなければできます。


たぶん、投げるページだけでなく、受け取るページも、「runat=server」を抜く必要があると思います。ViewStateの情報が崩れるから。
___________________________________________________________________
□ written by Jitta on 2005/10/30
□ Microsoft MVP :Visual Developer ASP/ASP.NET Oct.2005-Sept.2006
_________________
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2005-10-30 23:31
引用:
たぶん、投げるページだけでなく、受け取るページも、「runat=server」を抜く必要があると思います。ViewStateの情報が崩れるから。

「ある別のページ(既存システムでASP.NETではないページ)にPOSTパラメータを
渡したい 」いうことなのでrunat=serverは考慮してませんでした。

.NETでも下記のようなページ(WebMatrixで作成)にPOSTしたら問題ありませんでした。
#でも昔.NETのページにPOSTしたらエラーになった記憶がある。場合によるかもです。

コード:
<%@ Page Language="C#" %>
<script runat="server">
    void Page_Load(object sender, EventArgs e) {
    Label1.Text = Request["test"].ToString();
    }
</script>
<html>
<body>
    <form runat="server">
        <asp:Label id="Label1" runat="server">Label</asp:Label>
    </form>
</body>
</html>

くろ
会議室デビュー日: 2005/03/01
投稿数: 13
投稿日時: 2005-10-31 02:27
ご返答ありがとうございます。

引用:

べるさんの書き込み (2005-10-29 23:36) より:
<form>タグに runat="server" を書かなければできます。ただしそのFormでは
ASP.NETの様々な恩恵を受けられません。

あとは、submitする瞬間にjavascriptでactionを書き換える、とか。



送信元のページにサーバ側で実行されるロジックが含まれているので、javascriptで書き換える方法を選択してみました。
すると、受け取るページ(既存システムでASP.NETではないページ)がASPの場合は問題なくPOSTパラメータを受け取ることができたのですが、受け取るページを.NETで作成して試してみたところ、「System.Web.HttpException: データを検証できません。」のエラーが発生してしまいました。受け取るページの「runat=server」を外しても現象は変化しませんでした。

送信元ページのVIEWSTATEの情報?が受け取るページに送られてしまっているからでしょうか…。
trapemiya
大ベテラン
会議室デビュー日: 2005/07/30
投稿数: 102
投稿日時: 2005-10-31 10:06
引用:

くろさんの書き込み (2005-10-31 02:27) より:

送信元ページのVIEWSTATEの情報?が受け取るページに送られてしまっているからでしょうか…。


ViewStateは同一ページのみで有効です。したがって異なるページにPOSTすると、改竄されたと思われ、提示されたようなエラーが発生します。
PageディレクティブにenableViewStateMac="False"と記述すればこのようなチェックが行われなくなりますので、エラーは発生しないと思います。
ただ、ページ間のデータ渡しということであれば、他の方法も検討されてみたらいかがでしょうか?
くろ
会議室デビュー日: 2005/03/01
投稿数: 13
投稿日時: 2005-10-31 14:52
引用:

trapemiyaさんの書き込み (2005-10-31 10:06) より:

PageディレクティブにenableViewStateMac="False"と記述すればこのようなチェックが行われなくなりますので、エラーは発生しないと思います。
ただ、ページ間のデータ渡しということであれば、他の方法も検討されてみたらいかがでしょうか?



ありがとうございます、enableViewStateMac="False"の記述でエラーは発生しなくなりました。

このようなページ間での受け渡しをおこなっている理由として、受け取り先のページがASP.NETとは限らないということが理由にあります。その結果POSTパラメータで送信することになったのですが、他によい方法があるのでしょうか・・・。
Katze
ベテラン
会議室デビュー日: 2005/11/01
投稿数: 74
お住まい・勤務地: 1台でも せんだい
投稿日時: 2005-11-01 14:40
良い方法かは分かりませんが,JavaScriptを使用するのはダメでしょうか?

例えば,

コード:
Dim strScript as String

strScript = "<form name='Dmy_Post' action='xxxxx.asp' method='post'>" + vbCrLf
strScript += "<input type='hidden' name='Key' value='aaaa'>" + vbCrLf
strScript += "<input type='hidden' name='Data' value='bbbb'></form>" + vbCrLf
strScript += "<script lnaguage='JavaScript'>document.all.Dmy_Post.submit();" + vbCrLf
strScript += "<" + "/script>"

Response.Write(strScript)



スクリプト内のinputタグのnameとvalueを目的の値にかえたらうまくいくような気もしますが・・・

ただ,むりやりResponse.Writeするのが良いとは思えませんけど(^^;


[ メッセージ編集済み 編集者: Katze 編集日時 2005-11-01 14:50 ]

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