恐れ入ります。  
まずは現象を説明します。

```

    /dirBefore/xxx.aspxで
        Server.Transfer("/dirAfter/yyy.aspx")を実行し表示された
    /dirAfter/yyy.aspxで
        <asp:TextBox AutoPostBack="true"/>からポストバックすると
        フォームのactionが"/dirBefore/yyy.aspx"に書き換わってしまう
    
```

ちなみに

```

    <asp:button UseSubmitBehavior="false"/>
    
```

で先に一度サブミットさせると、以降症状は起きません。

そこで質問は  
この書き換えはどのモジュールで行っていて  
どうすれば制御できるのか  
です。

* * *

ちなみに、こちら  
ASP.NET Web フォーム用の URL 書き換え  
<https://technet.microsoft.com/ja-jp/library/ee890797.aspx>  
は参照し、以下のようにしましたが理解が及ばず解決しません。

Form.Actionの設定を試し  
以下の絶対パスではひとまずは成功していましたが

```

    Private Sub Page_Load(・・・) Handles MyBase.Load
      Page.Form.Action = Page.Request.CurrentExecutionFilePath
    End Sub
    
```

ある事情からセッションをクッキーレスにしなければならなくなり  
そのため以下のように（手抜きですが）相対パスに変更しましたが  
そうするとサブミット時に書き換えられてしまうケースが発生します。

```

    Private Sub Page_Load(・・・) Handles MyBase.Load
      Page.Form.Action = ".." & Page.Request.CurrentExecutionFilePath
    End Sub
    
```

書き換えられるのは、Transfer前後のパスの深度が異なる場合のようですが  
未確認です。

そもそもformのactionがブラウザのソースのままで  
勝手に書き換えらることさえなければこんな苦労は無用です。  
書き換え動作を無効にするか、さもなくば書き換えるパスを操作する方法知りたいということです。

よろしくお願い致します。
CC BY-SA 4.0
2017-04-03T04:26:23.487
33730
2018-05-27T14:43:43.183
2018-05-27T14:43:43.183
2238
20996
question
asp.net
postBackでフォームのactionが書き換わるのを制御したい
非同期ポストバックで送られてくるアクションが何らかの理由で`Server.Transfer`を使用しない場合と同じ`./yyy.aspx`となっているのだと思われます。

対策としてはコードビハインドの適当なイベントで`Page.Form.Action`を設定すれば`action`属性を明示することが出来ます。共通化するなら`Page_PreRenderComplete`などでしょうか。
CC BY-SA 3.0
2017-04-03T05:49:45.733
33732
2017-04-03T05:49:45.733
5750
33730
answer