访问javascript文件中的Model属性?

是否可以访问外部Javascript文件中的Model属性?

例如,在“somescript.js”文件中

var currency = '@Model.Currency'; alert(currency); 

在我的观点上

  

这似乎不起作用,但是如果我将javascript直接放入脚本标记内的视图中,那么它确实有用吗? 这意味着必须始终将代码放在页面中,而不是像下面这样加载外部脚本文件:

 @model MyModel;  var currency = '@Model.Currency'; alert(currency);  

有没有办法解决?

无法在JS文件中实现MVC / Razor代码。

您应该在HTML中设置变量数据(在.cshtml文件中),这在概念上是正常的,并且不违反关注点的分离(服务器生成的HTML与客户端脚本代码),因为如果您考虑它,这些变量值是服务器问题。

看看这个(部分但很好的)解决方法: 在MVC框架中的Javascript文件中使用Inline C#

我使用数据属性和jQuery解决了这个问题。 它使代码非常易读,无需部分视图或通过ViewEngine运行静态JavaScript。 JavaScript文件完全是静态的,将正常缓存。

Index.cshtml:

 @model Namespace.ViewModels.HomeIndexViewModel 

Index

@section scripts { }

Index.js:

 jQuery(document).ready(function ($) { // import all the variables from the model var $vars = $('#Index\\.js').data(); alert($vars.page); alert($vars.actionUrl); // Note: hyphenated names become camelCased }); 

_Layout.cshtml(可选,但好习惯):

   @Scripts.Render("~/bundles/js") @RenderSection("scripts", required: false)  

你可以做的是将剃刀标签作为变量传递。

在razor文件>

 var currency = '@Model.Currency'; doAlert(currency); 

在JS文件中>

 function doAlert(curr){ alert(curr); } 

试试JavaScriptModel( http://jsm.codeplex.com ):

只需将以下代码添加到控制器操作中:

 this.AddJavaScriptVariable("Currency", Currency); 

现在,您可以在JavaScript中访问变量“Currency”。

如果此孔中的变量应该可用,请将其放在filter中。 可以在文档中找到如何使用filter中的JavaScriptModel的示例。

你总是可以试试RazorJs。 它几乎解决了无法在你的js文件RazorJs中使用模型的问题

我所做的是使用方法调用模式创建一个js对象,然后您可以从外部js文件中调用它。 由于js使用全局变量,我将其封装起来以确保不会与其他js库发生冲突。 示例:在视图中

 @section scripts{  @Scripts.Render("~/Scripts/PathToExternalScriptFile.js") } 

现在,在外部页面内部,您可以获取具有受保护范围的数据,以确保它不会与js中的其他全局变量冲突。

 console.log('VariableOne = ' + thisPage.variableOne()); console.log('VariableTwo = ' + thisPage.variableTwo());