【问题标题】:Call ViewBag, ViewData, TempData in external js file在外部js文件中调用ViewBag、ViewData、TempData
【发布时间】:2017-09-09 01:13:34
【问题描述】:

在 MVC 应用程序中,我想在外部 .js 文件中获取 ViewBag、ViewData、TempData 值。 我不想在 view.cshtml 中编写脚本,所以我在其中添加了外部 js 文件。但是我无法在那个 js 文件中调用这个 ViewBag、ViewData、TempData 值。

谁能告诉我如何调用这些值而不在 view.cshtml 中编写任何 js 代码

【问题讨论】:

  • 您必须编写至少一行 js 代码来读取该值并将其分配给您的外部 js 可以使用的 js 变量

标签: javascript asp.net-mvc


【解决方案1】:

如果您想避免在 cshtml 中编写任何脚本,那么只需将隐藏字段设置为您要传递警报的值。 控制器:

TempData["Message"] = "My message text";

查看:

@if(TempData["Message"]) {
  <input type="text" id="tempdata" class="hidden" 
    value="@TempData["Message"]"/>
}

JS:

var tempMessage = document.getElementById('tempdata') ? 
         document.getElementById('tempdata').value : null;
if(tempMessage) { alert(tempMessage); };

【讨论】:

    【解决方案2】:

    因为 Razor 代码在服务器端运行,所以这些值不适用于在客户端运行的 Javascript。我知道解决这个问题的唯一方法是在 .js 文件中声明一些变量并在 .cshtml 文件中初始化它们。也许不适合您,但希望对您有所帮助。

    我的.cshtml:

    ...
    <script type="text/javascript">
       myVar = @(ViewBag.myVar);  // etc.
    </script>
    ...
    

    我的.js

    var myVar = null;
    
    function myFunc() {
       // Check for initialization
       if (myVar == null)
          alert("myVar not initialized!");
       ...
       // use myVar
       ...
    }
    

    【讨论】:

    • 只是想指出,您应该始终为您的 JavaScript 变量命名,尤其是在像这样在全局范围内声明时。
    猜你喜欢
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多