繁体   English   中英

ASP.Net MVC刷新页面而不破坏ViewModel

ASP.Net MVC Refresh Page without destroying ViewModel

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我想创建一个多语言网页。 要在两种语言之间切换,我的页面上有一个下拉菜单。 如果触发了下拉菜单的change事件,则会调用我的Controller中名为“ 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”属性-但Reference为null。 谁能解释为什么我的ChangeLanguage方法中HVM为空?

更改我的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});
}
2 个回复
May anyone explain why HVM is null in my ChangeLanguage Method?

秉承HTTP协议的无状态性质,所有(除非明确添加到请求标头中)请求(MVC方法调用)与之关联的松散状态数据。 Web服务器将每个请求视为一个新请求,并直接从控制器本身创建类的新实例。

在您的情况下,因为它是一个新请求,所以控制器已定义了HVM属性,但在ChangeLanguage中它没有被实例化(它仅被实例化到Index方法中,在您调用ChangeLanguage时不被调用),因此它为null。

更改我的SelectedLanguage属性后,我想重新加载整个页面以另一种语言显示其文本。

选项1:刷新页面

实现简单的选择。 将语言选择传递给服务器,服务器将返回带有特定数据的新视图。 缺点是,整个页面都会刷新。

选项2:有选择地更新视图

如果选项1确实不可接受,请考虑使用此选项。 有多种方法可以实现它。 基本上,它涉及(a)将视图分为部分视图并仅更新受选择影响的部分,或者(b)用JS对象绑定数据元素。

(a)-对此无需多说。

(b)-如果您使用像KnockoutJS这样的JS库,则可以轻松完成数据绑定。

将您的方法更改为这些方法,此技巧将对您有用=>将您的模型从视图更改为更改语言。 还要将JsonResult更新为ActionResult。

public ActionResult ChangeLanguage(ViewModels.HomeViewModel model,int id)
{
this.HVM.SelectedLanguage = 
this.HVM.AvailableLanguages.Where(o => 
o.ID.Equals(id)).First();
return RedirectToAction("Index",model);
}

public ActionResult Index(ViewModels.HomeViewModel model)
 {
if(model == null)
{
    this.HVM = new ViewModels.HomeViewModel();

}
return View(this.HVM);
}
1 ASP.NET MVC 3-ViewModel和刷新-问题

我被困在ViewModel绑定和刷新方案中。 场景:作为管理员,我想创建用户帐户,并根据DropDownList中选定的角色刷新FORM,以通过复选框选择与角色相关的特定访问权限(布尔)。 因此,用户可以具有一个默认访问列表的单一角色,可以在创建帐户时由管理员修改。 我的Vie ...

2 没有页面刷新的 ASP.NET MVC 5 表单 AJAX 发布

我有一个基本的 ASP.NET MVC 5 页面,上面有一个@HTML.BeginForm对象。 这个表单将是非常动态的,并且会在用户使用它时添加各种内容。 我想在这个表单中有几个按钮,在 AJAX Post 调用控制器以从数据库中收集数据(用于填充选择框)之前,我不希望它们实际提交表单。 我想要 ...

4 asp.net mvc3更新(刷新)视图中的视图模型

我发送带有字段和视图中简单IEnumerable的BOOKVIEWMODEL我通过视图中带有JSON AJAX的方法在视图中获得此列表IEnumerable,并且用JQUERY填充了我的表Ristourne(View),它工作得很好,但是我不知道如何在视图中填充(绑定或刷新)我的BOOKVIEW ...

5 在ASP.NET MVC中使用Ajax刷新Knockout ViewModel

我有一个包含初始值的表。 用户可以过滤表上的数据,并且表应该刷新。 我无法通过淘汰赛做到这一点。 视图: 查看模型: 初始绑定: Ajax调用以获取新表值: 调试我可以在Ajax调用的成功方法上看到JSON数据。 我该怎么做才能刷新数据? ...

7 asp.net mvc - 检测页面刷新

我理解StackOverflow上有关于这个问题的类似问题,但没有一个解决了我的问题,所以我正在创建一个新问题。 正如标题所说,我想检测用户何时刷新页面。 我有一个页面,我保存一些用户在其上完成的日志信息(添加,删除或编辑项目等)。 该日志只能在用户离开页面时保存,而不能通过刷新保存。 ...

8 刷新ASP.NET MVC页面

我在asp.net mvc上有一些应用程序。 我正在尝试创建表过滤器。 页面非常困难,所以我无法从JSON响应中获取数据。 我试图通过带有params的调用动作来获取它。 但是我看不到新数据。 怎么了? 如何刷新页面? PS:我的意思是我想从动作A转到动作A(带有参数)。 ...

9 ASP.NET MVC中的ViewModel

我正在尝试使用c#创建一个asp.net mvc网站。 我有两个模型: Event模型和Ticket模型。 我希望能够使用提供的CRUD视图创建Event ,然后单击“创建”时,应将用户转发到另一个页面,他们可以在该页面中向该事件添加票证。 到目前为止,我已经开始运行它,因此可以创建一个事 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM