クロス サイト POST を実行する必要があり (リダイレクトを使用するため、XMLHTTPRequest は使用しません)、ベース プラットフォームは ASP.NET です。ASP.NET FORM のすべてのコントロールをこの他のサイトに POST したくないので、javascript を使用して新しいフォーム要素を動的に作成し、それを投稿することを検討していました。
誰もこのトリックを試しましたか?注意事項はありますか?
クロス サイト POST を実行する必要があり (リダイレクトを使用するため、XMLHTTPRequest は使用しません)、ベース プラットフォームは ASP.NET です。ASP.NET FORM のすべてのコントロールをこの他のサイトに POST したくないので、javascript を使用して新しいフォーム要素を動的に作成し、それを投稿することを検討していました。
誰もこのトリックを試しましたか?注意事項はありますか?
私はいつもこれをしています。本当にうまくいきます。ただし、パラメーターがそのページのコントロールにマップされないため、渡す内容に工夫を凝らさない限り、リクエストのパラメーターを手動で確認する必要があります。クエリ文字列でパラメーターを渡すことにより、REST の方法でこれを行うこともできますが、URL をきれいに保つためにフォーム アプローチを好みます。ASP.NET はすべてのフォームを無視しますが、ポストバックでは独自のものであるため、それらを削除する必要はありません。
以下のコードの GridView テンプレート フィールドの例:
<asp:TemplateField HeaderText="Station" SortExpression="Name">
<ItemTemplate>
<a href="javascript:void(0);" onclick='Redirector.redirect_with_id("StationDetail.aspx", <%# Eval("StationID") != null ? Eval("StationID") : "-1" %>);return false;'>
<asp:Label ID="nameLabel" runat="server" Text='<%# Bind("Name") %>' /></a>
</ItemTemplate>
</asp:TemplateField>
以下のコード -- プロトタイプが必要です:
// JScript File
var Redirector = Class.create();
Redirector.prototype = {
initialize: function(url,target) {
this.url = url;
this.parameters = new Hash();
this.target = target;
},
addParameter: function(id,value) {
this.parameters.set(id, value);
},
redirect: function() {
var form = document.createElement('form');
document.body.appendChild(form);
form.action = this.url;
form.method = "post";
if (this.target) {
form.target = this.target;
}
this.parameters.each( function(pair) {
var input = document.createElement('input');
input.id = pair.key;
input.name = pair.key;
input.value = pair.value;
input.style.display = 'none';
form.appendChild(input);
});
form.submit();
}
};
Redirector.redirect_with_id = function(url,id,target) {
var redirector = new Redirector( url, target );
redirector.addParameter( 'ID', id );
redirector.redirect();
};
Redirector.redirect_with_tag = function(url,tag_name,tag,target) {
var redirector = new Redirector( url, target );
redirector.addParameter( tag_name, tag );
redirector.redirect();
};
Redirector.redirect_with_tags = function(url,tag_names_comma_separated,tag_values_comma_separated,target) {
var redirector = new Redirector( url, target );
var tags = tag_names_comma_separated.split( "," );
var values = tag_values_comma_separated.split( ",");
for( var i = 0; i< tags.length; i++ )
{
redirector.addParameter( tags[i], values[i] );
}
redirector.redirect();
};
1 つの注意点: innerHTML を使用してドキュメントに FORM タグを追加することはできません。新しい DOM 要素を作成して追加する必要があります。innerHTML を使用してフィールドを追加できますが、フォーム自体は追加できません。