ライブサイト(公開サイト)で使っている場合は特に問題がないのですが、 エクスペリエンスエディターの編集やプレビューモードで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を使用してページが表示された場合でも適切に動作するはずです。
さんのコメント: さんのコメント: