ライブサイト(公開サイト)で使っている場合は特に問題がないのですが、 エクスペリエンスエディターの編集やプレビューモードでController Rendering(コントローラーレンダリング)を使用して作成したフォームを送信するとトップページが表示されるという現象が発生したので対処方法を記載します。
まず、原因ですが、コンテンツエディターなどからxEditorをプレビューモードで起動するときに sc_itemid パラメーターが使用されるためです。 http://site.net/?sc_itemid=%7B11111111-2222-3333-4444-555555555555%7D みたいなURLになっていることをアドレスバーで確認できます。
コントローラーレンダリングを使用する場合に使用するフォームを生成する典型的なコードは次のようなものです。
<div> @using (Html.BeginRouteForm(MvcSettings.SitecoreRouteName, FormMethod.Post)) { <!-- フォーム用のhtml --> <div> <input type="submit" value="send" /> </div> } </div>
formでpostするURLを生成するときにSitecoreでデフォルトで定義されるルート名(Sitecore)を使用しますが、この方法でルートを生成するとページをリクエストしたときのアドレスがそのままformのポスト先のURLになります。
そのため "/?sc_itemid=XXX" みたいなアドレスでリクエストが発生すると "/" がフォームの送信先になります。フォームを送信するURLがトップページのパスになっているのでフォームを送信するとトップページが表示されたのは当然の結果となります。
ライブサイトで sc_itemid を指定してページをリクエストされることはないので(IDを知るすべがないため)まぁ気にしなくても問題はないと思います。どうしてもxEditorでsc_itemidを使用した場合もフォームが動作するようにしたい場合は次のように sc_itemidパラメーターを設定するようにしてください。都合のよいことにsc_itemidがクエリ文字列に存在しない場合はsc_itemidの設定は無視されformのポスト先のURLにsc_itemidは付与されません。
<div> @using (Html.BeginRouteForm(MvcSettings.SitecoreRouteName , new { sc_itemid = @HttpContext.Current.Request.QueryString["sc_itemid"] } , FormMethod.Post)) { <!-- フォーム用のhtml --> <div> <input type="submit" value="send" /> </div> } </div>
これで、xEditorでsc_itemidを使用してページが表示された場合でも適切に動作するはずです。
さんのコメント: さんのコメント: