![](/img/trans.png)
[英]How can I redirect to either another view or an external site from the same action in ASP.NET MVC?
[英]How do I redirect to my parent action in MVC site?
我已经在这里查看过几页,例如:
随着几个小时的搜索谷歌。
没有地方似乎可以解决我的问题,并且我确信在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语句返回到根页面,一个返回到根,但是使用某种语言,因此它将是“ http:// mysite / en-En / ”,但是如果用户不在根站点上,则该怎么办? ? 我想以某种方式将它们重定向回相同的操作,但开始时要使用正确的语言字符串。
我怎样才能做到这一点?
我想到了几种“ hacky”方式,例如拆分URL和交换语言代码。 但理想情况下,我希望做到这一点尽可能干净。
谁能给我任何想法? 还是只是不可能?
看起来应该真的很简单,但显然不是。
在此先感谢您可以提供的任何帮助。
已编辑
添加了使用下面建议答案中的代码的新代码。
我现在有两个新问题。
如果URL中有任何内容(例如?page = 1),我将收到此错误消息:从客户端(?)检测到潜在的危险Request.Path值。
如果我尝试使用.Remove()完全删除语言。 它可以很好地删除它,但是当我尝试以默认语言重定向到该页面时,它将在URI末尾添加language?= language。
有什么想法可以解决这两个问题吗?
这个选项绝对是我的答案。 给我留言,如果你需要我放弃了一些代码,我能做到这一点,但链接的网站上的例子应该让你开始。
使用此方法可以将Request.UrlReferrer更改为Route数据,然后将您的语言合并到该数据中,然后使用修改后的Route数据执行RedirectToRoute。
只要使用RouteData.Values.Add,RouteData.Values.Remove和RouteData.values [ “无所谓”],然后传递改性RouteData.Values反对RedirectToRoute()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.