所以我有我的第一个MVC2网站,我正在努力,当然我想在那里抛出一些AJAX。问题是,我在传递URL参数时不知道如何获取操作的URL。让我解释。到目前为止我看到的示例显示开发人员传递的字符串如'/ MyController / MyAction'。这很好,除非您的控制器不在您网站的根目录中(在我的情况下就是如此)。我总是可以使用像'MyAction'这样的相对URL,除非URL包含不起作用的参数。考虑http://example.com/myroot/MyController/MyAction vs http://example.com/myroot/MyController/MyAction/PageNumber/SomeOtherValue。现在相对URL将不正确。
在ASPX代码中,这很容易。我只写了<%= Url.Action(“MyAction”)%>。但是我如何在我的javascript文件中执行此操作?
答案 0 :(得分:1)
这是长期存在的问题的一部分,包括JavaScript文件中的服务器端代码实际上是不可能的:(。(没有严重的黑客攻击,那就是。)
最佳解决方案是将操作URL包含在HTML文件中的某个位置,然后从JavaScript获取该值。我的建议是这样的:
<!-- in your view file -->
<form id="MyForm" action="<%: Url.Action("MyAction") %>"> ... </form>
<!-- or -->
<a id="MyLink" href="<%: Url.Action("MyAction") %>"> ... </a>
结合
// In your .js file
$("#MyForm").submit(function ()
{
$.post($(this).attr("action"), data, function (result) { /* ... */ });
return false;
});
// or
$("#MyLink").click(function ()
{
$.getJSON($(this).attr("href"), data, function (result) { /* ... */ });
return false;
});
这对我来说在语义上很清晰,在某些情况下甚至会在关闭JavaScript时创建可降级的回退行为。
答案 1 :(得分:1)
您不能直接在JavaScript文件中执行此操作,但是您可以通过脚本初始化程序将这些动态值传递到脚本中。请考虑以下示例:
ShoppingCart = function() {
this.settings = {
AddProductToCartUrl: '',
RemoveFromCartUrl: '',
EmptyCartUrl: '',
UpdateCartUrl: ''
};
};
ShoppingCart.prototype.init = function(settings) {
this.settings = jQuery.extend(this.settings, settings || {});
};
<script type="text/javascript">
var cart = new ShoppingCart();
cart.init({ AddProductToCartUrl: '<%=Url.Action("MyAction")%>' });
alert(cart.settings.AddProductToCartUrl);
</script>
答案 2 :(得分:0)
简单:告诉您的javascript正确的网址是什么。
从战术上讲,你可以通过很多方式实现目标,但它们基本上分为两种技术:
var url = siteConfiguration.SITEROOT + 'products/pink-bunny-slippers'
注意这个文件可以是一个普通的MVC视图,唯一的技巧是你必须告诉控制器发送{{1标题而不是text / html。text/javascript
function wireUpAjaxLinksToService(linkIdentifier, serviceEndpoint)
IE