我想创建一个多语言网页。要在不同的语言之间切换,我的网页上有一个下拉菜单。如果下拉菜单中的更改事件被触发,则调用Controller中名为“ChangeLanguage”的Method。ASP.Net MVC刷新页面不破坏ViewModel
public ViewModels.HomeViewModel HVM { get; private set; }
// GET: Home
public ActionResult Index()
{
this.HVM = new ViewModels.HomeViewModel();
return View(this.HVM);
}
public JsonResult ChangeLanguage(int id) {
return Json(new {Success = true});
}
现在我想在我的ViewModel(HVM)中更改我的“SelectedLanguage”属性 - 但引用为空。任何人都可以解释为什么我的ChangeLanguage方法中HVM为空?
我SelectedLanguage属性改变后,我想我重新加载整个页面来显示它的文本在另一种语言
例如
@model ViewModels.HomeViewModel
<html>
<div class="HeaderText">
Text = @{
@Model.TextToDisplay.Where(o =>
o.Language.Equals(Model.SelectedLanguage)).First()
}
</div>
这里就是我想在伪做:
伪代码:
public JsonResult ChangeLanguage(int id) {
this.HVM.SelectedLanguage =
this.HVM.AvailableLanguages.Where(o =>
o.ID.Equals(id)).First();
Page.Reload();
return Json(new {Success = true});
}
由于您尚未初始化'HVM'的新实例(当您调用控制器方法时,将创建控制器的新实例 - 您无权访问您在先前调用中设置的属性到get方法)。您需要在某个地方保留该值(例如,一个数据库) – 2015-03-31 05:55:47
而你的制作和ajax调用所以没有太多的意义在_“重新加载我的整个页面”_。要么返回json与你想在DOM中更新的新值(请参阅我对[你的最后一个问题]的答案)(http://stackoverflow.com/questions/29257173/asp-net-mvc-update-viewmodel-on-dropdown -selection-changed))或更改方法以基于新语言返回部分视图并更新DOM – 2015-03-31 06:07:59