访问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( https://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中的其他全局变量冲突。
上述就是C#学习教程:访问javascript文件中的Model属性?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
console.log('VariableOne = ' + thisPage.variableOne()); console.log('VariableTwo = ' + thisPage.variableTwo());
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1020928.html