我有一个网站大量使用AJAX,为了将Urls之类的东西保存在合理的位置,我将所需的URL输出到页面上的脚本块中,然后稍后在Javascript文件中使用它们。
这方面的一个例子是:
在 Index.cshtml 中
<script>
if (!app.frontoffice)
app.frontoffice = {};
if (!app.frontoffice.urls)
app.frontoffice.urls = {};
if (!app.frontoffice.urls.index)
app.frontoffice.urls.index = "@Url.Action("index", "frontoffice", new { area = string.Empty, id = string.Empty })";
</script>
在某处的 JS 文件中
$(function() {
$("myButton").click(function(e) {
$.ajax({
url: app.frontoffice.urls.index,
data: {
id: 55
},
success: ...
error: ...
});
});
});
问题是生成的 Url 是这样创建的 - /frontoffice
,请注意它排除了index
操作。这是因为当它被生成时,我们给了它一个空id
,所以当我们使用它时,被请求的 Url 实际上是 /frontoffic/55', not
/frontoffice/index/55'。
UrlHelper
似乎正在从 url 中剔除操作名称。我可以使用其他方法不会从 URL 中删除项目吗?- 我希望得到一个清晰、可重用的解决方案,因为这种事情在整个网站上都会发生。
谢谢
基隆
您可以使用占位符作为 id。
app.frontoffice.urls.index = function (id) {
return "@Url.Action("index", "frontoffice", new { id = "000" })".replace('000', id);
}
然后在您的.js文件中
$(function() {
$("myButton").click(function(e) {
$.ajax({
url: app.frontoffice.urls.index(55),
success: ...
error: ...
});
});
});
这可能需要在路由定义中处理。您可能仍然定义了类似以下内容:
routes.MapRoute("Default", "{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional});
首先,我可能会删除它或在默认路由定义上方放置一些明确定义您生成的 URL 的内容。