首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >asp.net-mvc: js文件中的剃刀'@‘符号

asp.net-mvc: js文件中的剃刀'@‘符号
EN

Stack Overflow用户
提问于 2011-10-26 19:54:16
回答 6查看 57.6K关注 0票数 91

我有一个带有javascript函数的.csHtml-razor文件,该函数在内部使用@Url.Content C#函数作为ajax URL。

我想将该函数移动到从我的视图引用的.js文件中。

问题是javascript不能“识别”@符号,也不能解析C#代码。

有没有办法从视图中引用带有"@“符号的.js文件?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-01-10 03:32:19

您可以使用HTML5 data-*属性。假设您想要在单击某个DOM元素(如div )时执行某些操作。所以:

代码语言:javascript
复制
<div id="foo" data-url="@Url.Content("~/foobar")">Click me</div>

然后,在单独的javascript文件中,您可以低调地使用DOM:

代码语言:javascript
复制
$('#foo').click(function() {
    var url = $(this).data('url');
    // do something with this url
});

这样,您就可以在标记和脚本之间实现完全分离,而不需要在javascript文件中使用任何服务器端标记。

票数 87
EN

Stack Overflow用户

发布于 2011-10-26 20:04:27

为了将@变量放入.js文件中,您必须使用一个全局变量,并从使用该.js文件的mvc视图中设置该变量的值。

JavaScript文件:

代码语言:javascript
复制
var myValue;

function myFunc() {
  alert(myValue);
}

MVC视图文件:

代码语言:javascript
复制
<script language="text/javascript">
    myValue = @myValueFromModel;
</script>

只需确保对您的函数的任何调用都发生在视图设置了值之后。

票数 7
EN

Stack Overflow用户

发布于 2011-10-26 20:33:44

也许这不是正确的方法。考虑关注点的分离。您的JavaScript类上应该有一个data injector,它在大多数情况下是JSON格式的数据。

script文件夹中创建一个JS文件,并将此引用添加到View

代码语言:javascript
复制
<script src="@Url.Content("~/Scripts/yourJsFile.js")" type="text/javascript"></script>

现在,考虑yourJsFile.js中的一个JavaScript文本类

代码语言:javascript
复制
var contentSetter = {
    allData: {},
    loadData: function (data) {
        contentSetter.allData = eval('(' + data + ')');
    },
    setContentA: function () {
        $("#contentA").html(allData.contentAData);
    },
    setContentB: function () {
        $("#contentB").html(allData.contentAData);
    }
};

还要声明一个类

代码语言:javascript
复制
public class ContentData
{
    public string ContentDataA { get; set }
    public string ContentDataB { get; set }
}

现在,从您的Action执行以下操作:

代码语言:javascript
复制
public ActionResult Index() {
    var contentData = new ContentData();
    contentData.ContentDataA = "Hello";
    contentData.ContentDataB = "World";
    ViewData.Add("contentData", contentData);
}

从你的角度来看:

代码语言:javascript
复制
<div id="contentA"></div>
<div id="contentB"></div>

<script type="text/javascript">
    contentSetter.loadData('@Json.Encode((ContentData) ViewData["contentData"])');
    contentSetter.setContentA();
    contentSetter.setContentB();
</script>
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7902213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档