繁体   English   中英

ASP.Net MVC ActionResult返回缓存的视图吗?

ASP.Net MVC ActionResult returns cached View?

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

在问了一些有关如何根据下拉控件的选定值刷新页面的问题之后,我现在有了一个新问题-我的“ ChangeLanguage”方法以某种方式返回了View的缓存版本。

视图:

@model ViewModels.HomeViewModel

<!DOCTYPE html>

<html>
<head>
<meta name="viewport" content="width=device-width" />
<script src="~/Scripts/jquery-1.10.2.js" type="text/javascript"></script>
<title id="Title">Default</title>
</head>
<body>
<div class="Header">
    <div class="HeaderTextArea">
        <span id="HeaderText">
            @Model.Title.Where(o => o.Language.Equals(Model.SelectedLanguage)).FirstOrDefault().ControlText
        </span>
    </div>
    <div class="HeaderImageArea">
        <img id="RB_Image" src="~/Content/Images/RB_Logo.png" alt="RB_IMAGE" />
    </div>
    <div class="LanguageSelection">
        @{
            @Html.DropDownList("SelectedLanguage", new SelectList(Model.AvailableLanguages, "ID", "Description"))
        }
    </div>
</div>
<div class="Content">
    @RenderBody()
</div>

<script>
var url = '@Url.Action("ChangeLanguage", "Home")';
$('#SelectedLanguage').change(function () {
    $.getJSON(url, {
        ID: $(this).val(), Model: @Html.Raw(Json.Encode(Model))
        });
});

请注意,这是我的布局视图。 我也对索引进行了尝试,结果相同。

控制器:

public class HomeController : Controller
{
    public ViewModels.HomeViewModel HVM { get; private set; }
    // GET: Home
    public ActionResult Index()
    {
        this.HVM = new ViewModels.HomeViewModel();
        this.HVM.SelectedLanguage = this.HVM.AvailableLanguages.First();
        return View(this.HVM);
    }

    public ActionResult ChangeLanguage(int id, ViewModels.HomeViewModel model) {
        model.SelectedLanguage = model.AvailableLanguages.Where(o => o.ID.Equals(id)).First();
        model.SelectedTitle = model.Title.Where(o => o.Language.Equals(model.SelectedLanguage)).First();
        return View("Index", model);
    }
}

调用ChangeLanguage方法,修改所需的数据并按预期返回“新”视图-视图中的逻辑也起作用-但预期的内容未显示-而是显示“第一个视图”中的数据起来。 因此,数据和显示的数据不同。

PS。 我知道视图应该是愚蠢的,内部不应放置任何逻辑-但这只是出于测试目的。 最后,所有内容都应位于我的ViewModels中。

2 个回复

您没有缓存任何内容。 一个ajax调用停留在同一页面上。 您正在调用一个返回视图(应该是部分视图)的方法,但是随后您对该内容不执行任何操作(即更新DOM)。 您的脚本还使用$.getJSON()需要json的$.getJSON() ,但是您的控制器方法返回了html,因此无论如何它都不会起作用。 另外,不要使用@Html.Raw(Json.Encode(Model)传递回整个模型,这将传递您已经可以在控制器中访问的原始模型(未更改),因此只会降低性能。

您可以考虑的3个选择

  1. 将选择的语言传递到控制器方法,该方法返回json,正如我对先前问题之一的回答所指出的。 这将提供最佳性能
  2. 将所选语言传递给控制器​​方法,该方法返回部分视图并更新DOM

控制器(注意删除public ViewModels.HomeViewModel HVM { get; private set; }

public PartialViewResult ChangeLanguage(int id) {
  HomeViewModel model = new HomeViewModel();
  model.SelectedLanguage = model.AvailableLanguages.Where(o => o.ID.Equals(id)).First();
  model.SelectedTitle = model.Title.Where(o => o.Language.Equals(model.SelectedLanguage)).First();
  return PartialView(model); // the partial just contains the elements you want to update
}

视图

<div id="mycontent"></div>

$('#SelectedLanguage').change(function () {
  $('#mycontent').load(url, { ID: $(this).val() });
});
  1. 如果您不关心性能,则将下拉列表放入带有“提交”按钮的表单中,然后进行常规提交(如果要生成一个完整的新视图,则使用ajax毫无意义)

添加OutputCache属性,如下所示

 [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
 public ActionResult ChangeLanguage(int id, ViewModels.HomeViewModel model) {
2 在ASP.NET MVC中查看缓存的数据

是否有任何第三方工具或视觉工作室中的东西可以让你看到缓存的对象? 例如,一个动作是缓存数据(由参数改变),我希望看到缓存的对象和属性(比如在缓存此数据时将哪些参数值发送到操作)。 ...

4 asp.net MVC3 ActionResult多个模型和一个视图

我正在尝试使用asp.net MVC3做的事情: -用户从类别列表中选择一个类别 。 -“子类别”页面随后显示找到的代表该父类别的图像列表以及“ 子类别”列表。 我遇到了多个模型的需求,因为“ 类别图像 ”与类别关联,而不是与“ SubCategory模型 ”关联。 是的,我 ...

5 ASP.NET MVC-如何显示返回到javascript的“ ActionResult”视图?

我将DotNetOpenAuth与自定义登录提供程序结合使用,以将用户登录到我的网站。 我的大部分代码都在工作,但是返回视图并显示它时出现问题,以便用户可以登录到提供程序。 基本上,该操作将一个actionresult返回到调用javascript,该结果是特定提供程序上的登录页面。 我期 ...

6 asp.net mvc返回actionresult视频

当我尝试使用asp.net mvc csharp返回mp4视频时,我应该使用什么动作结果? 目前,我将我的视频隐藏在一种方法背后,以防止未经授权的访问。 我在网络浏览器中通过JWPlayer调用这些视频。 但是,标题信息似乎丢失或视频准备下载而不是播放。 不管怎样,有点奇怪。 ...

8 在ASP.Net MVC中将ModelState设置为ActionResult

在View ,我创建了一个&lt;form&gt; ,它将一些数据发布到另一个Controller ,这与将我重定向到View的Controller不同。 在第二个控制器中,我执行一些数据验证,然后,如果发现错误,则需要使用已编辑的ModelState将用户再次重定向到源视图(以便我可以显示验 ...

9 自定义ASP.NET MVC ActionResult未执行

我从这里开始使用PermanentRedirectResult在ASP.NET MVC 1中执行301重定向。由于升级到2.0,因此不再发送301响应。 而是发送一个仅包含类名的200响应。 设置断点表示永远不会调用PermanentRedirectResult上的ExecuteResu ...

10 ASP.NET MVC操作导致多个页面

我目前有一个Products控制器,每个产品都有一个硬编码的“ Product”操作结果(因为产品是固定的,并且不会更改): 这样,每个产品都包含一个包含所有信息的页面。 现在,我想为每个产品创建多个页面以突出显示某些功能或选项,而不是显示单个产品页面。 例如: 做这个的 ...

暂无
暂无

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

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