Javascript 在外部js文件中调用ViewBag、ViewData、TempData

Javascript 在外部js文件中调用ViewBag、ViewData、TempData,javascript,asp.net-mvc,Javascript,Asp.net Mvc,在MVC应用程序中,我想在外部.js文件中获取ViewBag、ViewData、TempData值。 我不想在view.cshtml中编写脚本,所以我在其中添加了外部js文件。但我无法在该js文件中调用此ViewBag、ViewData和TempData值 有人能告诉我如何调用这些值而不在view.cshtml中编写任何js代码吗?因为Razor代码在服务器端运行,这些值对于在客户端运行的Javascript不可用。我知道解决这个问题的唯一方法是在.js文件中声明一些变量,并在.cshtml文件

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


有人能告诉我如何调用这些值而不在view.cshtml中编写任何js代码吗?因为Razor代码在服务器端运行,这些值对于在客户端运行的Javascript不可用。我知道解决这个问题的唯一方法是在.js文件中声明一些变量,并在.cshtml文件中初始化它们。也许对你来说不太理想,但我希望它能帮助你

my.cshtml:

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

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

TempData["Message"] = "My message text";
视图:


我想指出的是,您应该始终为JavaScript变量命名名称空间,尤其是在这样的全局范围内声明时。您必须至少编写一行js代码来读取该值,并将其分配给外部js可以使用的js变量
TempData["Message"] = "My message text";
@if(TempData["Message"]) {
  <input type="text" id="tempdata" class="hidden" 
    value="@TempData["Message"]"/>
}
var tempMessage = document.getElementById('tempdata') ? 
         document.getElementById('tempdata').value : null;
if(tempMessage) { alert(tempMessage); };