4

クロス サイト POST を実行する必要があり (リダイレクトを使用するため、XMLHTTPRequest は使用しません)、ベース プラットフォームは ASP.NET です。ASP.NET FORM のすべてのコントロールをこの他のサイトに POST したくないので、javascript を使用して新しいフォーム要素を動的に作成し、それを投稿することを検討していました。

誰もこのトリックを試しましたか?注意事項はありますか?

4

2 に答える 2

3

私はいつもこれをしています。本当にうまくいきます。ただし、パラメーターがそのページのコントロールにマップされないため、渡す内容に工夫を凝らさない限り、リクエストのパラメーターを手動で確認する必要があります。クエリ文字列でパラメーターを渡すことにより、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();
};
于 2008-10-10T16:45:49.827 に答える
0

1 つの注意点: innerHTML を使用してドキュメントに FORM タグを追加することはできません。新しい DOM 要素を作成して追加する必要があります。innerHTML を使用してフィールドを追加できますが、フォーム自体は追加できません。

于 2008-10-10T17:12:31.207 に答える