私はすでにここで次のようないくつかのページを見てきました:
ASP.NET MVCで前のアクションにリダイレクトするにはどうすればよいですか?
アクションをWebサイトのルートにリダイレクトするにはどうすればよいですか?
グーグルを検索する数時間と一緒に。
私の問題に対する答えはどこにもありません。MVC内でそれが可能であると確信しているので、私が今ここに質問をする理由があります。
したがって、私が直面している問題は、ユーザーが独自の部分ビューにあるドロップダウンメニューから新しい言語を選択してページの言語を変更できるようにしたいため、親アクションにリダイレクトする必要があるということです。子供ではありません。ユーザーをサイトのルートに戻す限り、これはすべて正常に機能します。次のコードを使用します。
[HttpPost]
public ActionResult RegionSelect(RegionSelectionModel model)
{
var currentUser = Session.GetCurrentUser();
var currentDbUser = Session.GetUserEntity(_dataAccessLayer);
if (!ModelState.IsValid)
{
model.AvailableRegions = CacheHelpers.GetAvailableRegions<RegionView>(_dataAccessLayer, _cache).ToList();
return PartialView("_RegionSelect", model);
}
var selectedRegion = UsersControllerHelpers.SetSelectedRegion(model, _dataAccessLayer, _cache, _website.Client);
var uri = model.OriginalUrl;
var routeInfo = new RouteHelpers(uri, HttpContext.Request.ApplicationPath);
// Route Data
var routeData = routeInfo.RouteData;
routeData.Values.Remove("language");
var defaultClientLanguageCode = _website.Client.LanguagesSupported.FirstOrDefault().Code;
if (currentDbUser.Language.CountryCode != selectedRegion.PrimaryLanguage.CountryCode)
{
//TODO: Decide where to redirect or whether to refresh the whole page...
if ((defaultClientLanguageCode == selectedRegion.PrimaryLanguage.CountryCode) || (model.SelectedRegionId == 0))
{
UsersControllerHelpers.UpdateUsersRegions(currentUser, selectedRegion, _website.Client, _cache, _dataAccessLayer,
Session);
return RedirectToRoute(routeData.Values);
}
routeData.Values.Add("language",selectedRegion.PrimaryLanguage.CountryCode);
return RedirectToRoute(routeData.Values);
}
return RedirectToRoute(routeData.Values);
}
私のreturnステートメントのうち2つはルートページに戻り、1つはルートに戻りますが、言語は「http:// mysite / en-En /」になりますが、ユーザーがルートサイト以外のページにいる場合はどうなりますか?どういうわけか、最初に正しい言語文字列を使用して、同じアクションにリダイレクトしたいと思います。
これどうやってするの?
URLを分割したり、言語コードを入れ替えたりするなど、これを行うためのいくつかの「ハッキー」な方法を考えました。しかし、理想的には、これを可能な限りクリーンにすることを目指しています。
誰かが私に何かアイデアを教えてもらえますか?それともそれは不可能ですか?
本当にシンプルなはずですが、そうではないようです。
あなたが提供できるどんな助けにも前もって感謝します。
編集済み
以下の提案された回答からのコードを使用している新しいコードを追加しました。
私は今、2つの新しい問題を抱えています。
URLに?page = 1などの何かがある場合、このエラーメッセージが表示されます:潜在的に危険なRequest.Path値がクライアントから検出されました(?)
.Remove()を使用して言語を完全に削除しようとすると、それはうまく削除されますが、デフォルトの言語でページにリダイレクトしようとすると、URIの最後にlanguage?=languageが追加されます。
これらの2つの問題を解決する方法はありますか?