访问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());
- 如何从模型中获取值并进入视图Javascript(Visual Studio 2015 mvc)
- 仅支持启用了Javascript的用户
- 如何在Windows 10 UWP中基于HTML内容调整Webview高度?
- 在ASP.NET中保留Postback上的水平和垂直ScrollPosition
- 从cs页面启用/禁用必填字段validation器?
- 将JavaScript确认提示添加到ASP.NET网格视图中的删除命令按钮?
- “此文件被阻止,因为它来自另一台计算机” – ajax权限问题
- 将字典传递给控制器asp.net mvc
- document.getElementById(’id’)。值在ASP.net javascript函数中失败