MVC&将数据从Controller ActionResult传递到Page的JavaScript

时间:2017-04-13 17:43:54

标签: asp.net-mvc asp.net-mvc-4

我不确定如何搜索我正在寻找的内容。我尝试的所有搜索字词似乎都返回完全不相关的结果。如果这是一个愚蠢的问题,我提前道歉,但如果这是可能的,似乎它会使一些事情更有效率。我在一年多前就继承了我的第一个MVC网站&我到处走,但我还有很多需要学习的东西。

当用户点击浏览器中的URL时," OnActionExecuting"为(CS)控制器调用方法,它执行用户的所有验证,权限等。(我试图保持这个简单,但如果您需要更多信息,请告诉我)然后& #34;公共ActionResult Index()"被调用并加载CSHTML文件并将其显示给用户。此时,CSHTML页面可以访问为#34; ViewBag"传回的一些有限数据。 (不确定这是否是它的通用名称,或由以前的程序员设置)设置。

然后页面调用它(JavaScript)控制器。根据我的阅读,JavaScript无法访问" ViewBag"此时来自服务器的数据或任何内容。然后JS调用AJAX方法,这些方法存在于完全相同的(CS)控制器中。它再一次完成所有完全相同的用户/权限检查,然后检索它试图检索的任何数据。

所以我想我的问题是,是否有办法传回"每一页" JSON数据(就像用户的名字一样),因此不需要检索它,或者通过在第一个位置进行初始数据检查,或者这是做什么的?我厌恶多次调用这么多功能来完成同样的事情。实际上,我还没有在这个迭代中测试过这个,但是如果在每个页面上都调用了多个AJAX(除非它们应该尽可能合并),它将在每次AJAX调用时执行一次用户/权限检查。

有人可以帮助我理解我缺少的东西吗?

1 个答案:

答案 0 :(得分:0)

您的方案的解决方法如下: -

  1. 将您的常用“每页”数据传递给OnActionExecuting()中的.ViewBag对象

  2. 在你的“Views \ Shared \ _Layout.cshtml”中创建一个javascript块并以类似的方式编写你的JavaScript:

    <script>
        var username = "@ViewBag.Username";
    </script>
    
  3. 当你的.cshtml被渲染时,@ ViewBag.Username的剃刀调用将检索该对象中保存的任何内容并将其填入引号内,因此在到达浏览器之前成为JavaScript的一部分。