我的应用程序使用我的javascript中的AJAX调用(使用$.get
,$.post
等)对Action方法进行许多调用。
我现在正在尝试清理我的 javascript 文件,唯一阻止我从页面中完全删除内联脚本的是需要让我的操作方法路由在页面中呈现,以便我可以将它们设置为我的 javascript 的正确变量。
示例类似于
url = '@Url.Action("SomeMethod","SomeController",new{area="SomeArea"})'
我想做的是在global.asax
中运行一个生成我需要的路由的方法(手动编程没有问题),然后根据文件app.js
检查它们 - 其中包括所有生成的硬编码的网址 - 如果需要更改一个URL。
这样,我可以将所有 url 放在全局对象中,而无需使用内联脚本来呈现 url。这可能吗?
在进行了更多研究之后,我遇到了适合我想要的解决方案:
- 创建一个返回基本上
app.js
内联的分部视图的ActionResult
方法。- 或者直接在控制器方法中编写javascript并返回
JavasScriptResult
,如图所示 - 尽管这是不受欢迎的。
- 或者直接在控制器方法中编写javascript并返回
- 根据这些说明创建一个为上述方法设置缓存的
ActionFilterAttribute
。 - 在源指向 javascript actionresult 方法的
<head>
中包含<script>
标记。
所以最终结果:
public JavaScriptResult GetApp()
{
return PartialView("App.js.cshtml");
}
将缓存属性设置为每 24 小时(或其他时间)一次,以便对控制器的调用只命中一次。现在,我可以确保更改的 url 在不使用内联呈现的情况下传播到客户端。