【问题标题】:ASP.NET MVC calling a differen't controller's action from JavaScriptASP.NET MVC 从 JavaScript 调用不同的控制器操作
【发布时间】:2011-04-20 23:26:53
【问题描述】:

我在位于以下地址的 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

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

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

【问题讨论】:

    标签: jquery asp.net-mvc ajax


    【解决方案1】:

    既然你已经有了带参数的 url,你可以这样做:

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

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

    【讨论】:

      【解决方案2】:

      至少有3种可能性:

      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 中获取 url:

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

      您还可以使用其他端口在 IIS 7 的根目录中创建应用程序,或者将其添加到主机文件中,以便您的 url 看起来像:htttp://someapp.local,我们使用最后一个选项,因为它是一个更好地代表实时应用程序。

      如果您需要更多帮助,请告诉我!

      【讨论】:

        【解决方案3】:

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

        ASP.NET MVC 2

        【讨论】:

          猜你喜欢
          • 2011-02-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-10
          相关资源
          最近更新 更多