【发布时间】:2015-03-31 14:12:17
【问题描述】:
我想创建一个多语言网页。要在语言之间切换,我的页面上有一个下拉菜单。如果下拉菜单的更改事件被触发,则会调用我的控制器中名为“ChangeLanguage”的方法。
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”属性 - 但引用为空。谁能解释为什么 HVM 在我的 ChangeLanguage 方法中为空?
在我的 SelectedLanguage 属性更改后,我想重新加载我的整个页面以用另一种语言显示它的文本
例如
@model ViewModels.HomeViewModel
<html>
<div class="HeaderText">
Text = @{
@Model.TextToDisplay.Where(o =>
o.Language.Equals(Model.SelectedLanguage)).First()
}
</div>
这是我想在 PseudoCode 中做的事情:
伪代码:
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 方法)。您需要将值保存在某处(例如数据库) -
而你的制作和 ajax 调用在 “重新加载我的整个页面” 中没有多大意义。要么用你想在 DOM 中更新的新值返回 json(参见我对your last question 的回答),要么更改方法以基于新语言返回部分视图并更新 DOM
标签: c# jquery asp.net-mvc