我有一个带有javascript函数的.csHtml
-razor文件,该函数在内部使用@Url.Content
C#函数作为ajax URL。
我想将该函数移动到从我的视图引用的.js
文件中。
问题是javascript不能“识别”@
符号,也不能解析C#代码。
有没有办法从视图中引用带有"@“符号的.js
文件?
发布于 2012-01-10 03:32:19
您可以使用HTML5 data-*
属性。假设您想要在单击某个DOM元素(如div )时执行某些操作。所以:
<div id="foo" data-url="@Url.Content("~/foobar")">Click me</div>
然后,在单独的javascript文件中,您可以低调地使用DOM:
$('#foo').click(function() {
var url = $(this).data('url');
// do something with this url
});
这样,您就可以在标记和脚本之间实现完全分离,而不需要在javascript文件中使用任何服务器端标记。
发布于 2011-10-26 20:04:27
为了将@
变量放入.js文件中,您必须使用一个全局变量,并从使用该.js文件的mvc视图中设置该变量的值。
JavaScript文件:
var myValue;
function myFunc() {
alert(myValue);
}
MVC视图文件:
<script language="text/javascript">
myValue = @myValueFromModel;
</script>
只需确保对您的函数的任何调用都发生在视图设置了值之后。
发布于 2011-10-26 20:33:44
也许这不是正确的方法。考虑关注点的分离。您的JavaScript
类上应该有一个data injector
,它在大多数情况下是JSON
格式的数据。
在script
文件夹中创建一个JS文件,并将此引用添加到View
中
<script src="@Url.Content("~/Scripts/yourJsFile.js")" type="text/javascript"></script>
现在,考虑yourJsFile.js
中的一个JavaScript
文本类
var contentSetter = {
allData: {},
loadData: function (data) {
contentSetter.allData = eval('(' + data + ')');
},
setContentA: function () {
$("#contentA").html(allData.contentAData);
},
setContentB: function () {
$("#contentB").html(allData.contentAData);
}
};
还要声明一个类
public class ContentData
{
public string ContentDataA { get; set }
public string ContentDataB { get; set }
}
现在,从您的Action
执行以下操作:
public ActionResult Index() {
var contentData = new ContentData();
contentData.ContentDataA = "Hello";
contentData.ContentDataB = "World";
ViewData.Add("contentData", contentData);
}
从你的角度来看:
<div id="contentA"></div>
<div id="contentB"></div>
<script type="text/javascript">
contentSetter.loadData('@Json.Encode((ContentData) ViewData["contentData"])');
contentSetter.setContentA();
contentSetter.setContentB();
</script>
https://stackoverflow.com/questions/7902213
复制相似问题