ASP.NET MVC从JavaScript调用不同控制器的操作

时间:2011-04-20 23:26:54

标签: jquery asp.net-mvc ajax

我在位于以下地址的ASP.NET MVC页面:

http://somedomain/someapp/Foo/Bar?param=val

我有一个 Foo 控制器,还有一个 Bar 控制器。我需要调用 Bar 控制器的 DoSomething 操作,并将其传递给我在当前URL的查询字符串中已有的参数:

http://somedomain/someapp/Bar/DoSomething?param=val

我不能将AJAX调用的URL设置为“/ Bar / DoSomething”,因为这会将我带到以下地址:

http://somedomain/Bar/DoSomething?param=val

我无法指定整个网址,因为这会因部署而异。

我假设有一些方法可以使用MapRoutes来实现这一点,它可以实现我想要的并传递数据。

3 个答案:

答案 0 :(得分:1)

至少有三种可能性:

1 - 您可以在javascript中设置“全局”变量,您可以在其中设置Web应用程序库的值,并将“http://somedomain.com/someapp/”替换为变量:

var liveString = "http://" + window.location.host;
if (liveString.indexOf('somedomain.com') > 0) {
    liveString = liveString + '/someapp';
} else if (liveString .indexOf('localhost') > 0) {
    liveString = liveString + '/localApp';
}

你也可以在jQuery中找到一个链接:

<a id="link-id" href="<%Url.Action("ActionName", "ControllerName", new { param = val })%>" style="display:none;"></a>

var myUrlCall = $('#link-id').href;

您还可以使用其他端口在IIS 7的根目录中创建应用程序,或将其添加到主机文件中,这样您的网址可能如下所示:httt://someapp.local,我们使用最后一个选项,因为它是一个更能代表实时应用程序。

如果您需要更多帮助,请与我联系!

答案 1 :(得分:1)

由于您已经拥有带参数的网址,因此您可以执行以下操作:

ResolveUrl("~/Bar/DoSomething?param=val");

将给定的虚拟网址转换为绝对网址

答案 2 :(得分:0)

查看Ajax.ActionLink 您可以在那里指定控制器的名称,以及在成功,失败等时调用的代码。

ASP.NET MVC 2