2016-09-22 84 views
1

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

谁能告诉我如何调用这些值,而不写入view.cshtml

+0

你必须写的js代码ATLEAST一行读取该值,并将其分配给一个js变量,你外部js可以使用 – Shyju

回答

2

由于剃刀代码在服务器端运行的任何js代码,这些值不可用于JavaScript运行在客户端。我知道解决这个越来越唯一的办法是在你的.js文件中声明了一些变量并在.cshtml文件中对它们进行初始化。也许对你来说并不理想,但我希望它有帮助。

my.cshtml:

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

my.js

var myVar = null; 

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

只是想指出,你应该总是*命名空间你的JavaScript变量,特别是在像这样在全局范围内声明时。 –

0
如果你想避免在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); };