2010-06-02 117 views
4

我们现在面临一个问题。我们有一个很大的页面,里面有一个内嵌脚本,可以完成所有的工作。我们现在想混淆它并将其用作单独的.js文件。但问题是我们有Url助手(Url.Content())生成的路径。那么将js文件从页面中分离出来而不使用硬编码路径字符串的最好方法是什么?ASP.NET MVC路由和路径是js文件

回答

0

您可以创建JavaScript函数来设置所需路径并从页面的小脚本部分调用它们。

JavaScript文件:

var resource1; 
var resource2; 

function setResourcesReferences(resource1, resource2, ...) { 

} 

ASPX文件:

<script type="text/javascript"> 
    setResourcesReferences(<% Url.Content("Resource1") %>, <% Url.Content("Resource2") %>, ...); 
</script> 
8

我通常写我在不同的视图的JavaScript(只有JS代码),并用自己的行动结果来呈现它。这样我就可以利用服务器端的c#,并且如果需要的话我可以使用一个模型,并且它将作为外部js文件包含在浏览器中(通过适当的缓存)。我用的是动作的结果可以在这里找到:http://codepaste.net/p2s3po

更新

您可以使用像这样从操作的操作结果:

public ActionResult JsFile() { 
    ViewData.Model = //Create model if you want one; 
     return new JavascriptFileResult(true) 
        { 
         TempData = TempData, 
         ViewData = ViewData 
        }; 
} 

然后你只是把它当作好像它是一个普通的视图(但只能在视图中写入javascript)。当然你也可以使用任意数量的参数。

可以包括这样说:

<script type="text/javascript" src="<%=Url.Action("JsFile", "ControllerName")%>"></script> 
+0

这听起来像一个很好的解决方案。但是,RegexReplace方法和JavaScriptCompressor类来自您发送的代码段?还有一个问题 - 我应该如何从我的操作中使用JavascriptFileResult? – HiveHicks 2010-06-03 08:13:18

+0

@HiveHicks,对不起,忘了提。他们都来自Yahoo.Yui.Compressor库,你可以在这里下载:http://yuicompressor.codeplex.com/。我会更新我的答案,向您展示如何使用操作结果。 – 2010-06-03 08:37:24

+0

太好了,谢谢!看起来像最好的解决方案。 – HiveHicks 2010-06-03 14:03:57