问题:
什么是从 JavaScript 调用我的 MVC 控制器/操作的清晰、安全和系统的方法,但将相关的 URL 保存在中心位置以便在控制器更改时进行更新?还是在运行时动态生成 URL?或者获取 AJAX 控制器链接的编译时检查?
研究/过去的尝试:
我最近将 T4MVC 插入到我的 MVC 项目中。伟大的!编译时检查我的视图中的控制器链接 - 但我的 JavaScript 中仍然散落着控制器 URL。更糟糕的是,我已经在项目生命周期中改进了我的工作方式,所以我以多种方式进行,但我仍然不满意。
1)一种方式:
locationAutoComplete = new AjaxQueue({
Controller: "Utilities", // null for current controller
Action: "GetMatchingLocations",
DataModel: null, // null for raw JSON, or a local model to populate
MaxQueuedRequests: 0
});
2)另一种方式:
locationAutoComplete = function (location) {
return $.ajaxPost(resolveUrl("~/Utilities/GetMatchingLocations"));
}
3) 上面的 1 和 2 都使用了在 Master/Layout JavaScript 片段中定义的项目根,但仍然使用未经检查的 URL 字符串。所以现在我通过在我的 .CSHTML 视图中简单地定义控制器字符串开始从 T4MVC 中受益:
var locationLookupController = @Url.Action(MVC.Utilities.GetMatchingLocations());
4) SO 文章(Ajax call Into MVC Controller-Url Issue)稍微解决了这个问题。它讨论了方法 3,但也建议使用 AjaxHelper 命名空间。由于我大量使用 jQuery AJAX 和一些非常自定义的交互(例如,将结果加载到本地数据模型中,而不是在单击事件中,而是在时间间隔中),我认为它对我没有多大帮助。今天,我什至没有在我的任何页面上包含 MS AJAX JavaScript 代码。
谢谢!