如何从剃刀部分引用javascript变量?

时间:2015-08-04 10:31:51

标签: javascript c# css asp.net-mvc razor

我正在尝试将CS​​S文件动态渲染到我的视图中,但该文件的部分位置是在javascript变量中。

目前我有:

@section Styles {
    @{

        <link href="@Url.Content(Model.CssPath)" rel="stylesheet" type="text/css" />
     }
}

但我需要在路径中包含变量,如下所示:

@section Styles {
    @{
       var pathPrefix = "somePath/";
        <link href="@Url.Content(pathPrefix + Model.CssPath)" rel="stylesheet" type="text/css" />
    }
}

我理解在javascript变量存在之前评估服务器端代码,那么我怎么做到这一点呢?

2 个答案:

答案 0 :(得分:1)

首先 - 为什么混合客户端/服务器端代码?

您不能将JS变量与服务器端生成的内容一起使用,因为 - 如您所说 - 它是在客户端的浏览器访问JS代码之前在服务器上执行的。这是预期的行为。

如果可以在服务器端确定此变量值,则应将其移动到那里。

如果必须在客户端生成,您可以使用<link>生成document.createElement('link');代码,但对我来说似乎很奇怪:))

答案 1 :(得分:0)

我没有尝试通过剃刀视图添加样式表,而是将csspath放入javascript变量中,然后使用jquery将其与pathPrefix组合并以这种方式附加样式表。

像......那样......

<script>
    var cssPath = @Model.cssPath;
    var pathPrefix = "www.";
    $('head').append('<link rel="stylesheet" type="text/css" href="'+pathPrefix+cssPath+'">');
</script>