【问题标题】:Use jquery/ajax to call a c# (or any other .net) function in another project within the same solution使用 jquery/ajax 在同一解决方案中的另一个项目中调用 c#(或任何其他 .net)函数
【发布时间】:2013-01-22 14:17:11
【问题描述】:

有谁知道是否可以使用 jquery/ajax 在同一解决方案中的另一个项目中调用 c#(或任何其他 .net)函数?

假设解决方案的名称是 ExampleSolution ,我调用目标函数的项目名称是 Project.Source ,目标项目的名称是 Project.Target , 目标函数的名称是TargetFunction()

我尝试在.js file 中关注Project.Source

    $.ajax({
            url: '/ExampleSolution/Project.Target/TargetFunction',            
            type: 'get',
            success: function (data) {
                $(document.body).append(data);
            }
   });

然后我用几种方式修改了 url-line,但从未成功。

你有什么建议吗?

【问题讨论】:

  • 您需要编写一些东西(例如,一个 MVC 操作)来接受 HTTP 请求并调用该方法。
  • ScriptMethod 属性可能,但您的服务器端代码必须处理将调用传递给库:msdn.microsoft.com/en-us/library/…

标签: c# javascript ajax project solution


【解决方案1】:

感谢大家的快速回答。

我找到了解决问题的方法,我想分享它,以防将来有人遇到同样的问题。

在调用 $.ajax 函数之前的 .js 文件中,我在 window.location 的帮助下创建了一个变量,该变量指向正在运行的目标项目的目标函数的 url,并在 ajax 函数中使用该变量。所以你不要指向另一个项目。您指向正在运行的项目的 url。

就像听起来一样简单。

解决方法如下:

    var url = window.location = 'http://localhost:13105/TargetFunction';

    $.ajax({
        url: url,
        type: 'get',
        success: function (data) {
            $(document.body).append(data);
        }
    });
});

【讨论】:

  • 不错的肮脏解决方案! :D
【解决方案2】:

您只能调用代码隐藏中的函数,因为它们正在由 Web 服务器注册。

如果您希望在 Code Behind 之外访问某个函数,则需要将其注册为 ASMX 或 WCF 服务。

有关设置 WCF 服务的信息,请参阅 Creating and Consuming Your First WCF Service

一旦设置并运行,您就可以使用 Ajax 来调用方法,就像在后面的代码中一样。

$.ajax({
        //Path to WCF Server and Target Method
        url: "http://localhost:PORT/wcfsvc/FooService.svc/Foo",
        type: 'get',
        contentType: 'application/json; charset=utf-8',
        success: function (data) {
            $(document.body).append(data);
        }
});

另见:Consuming WCF from jQuery as JSON

【讨论】:

    【解决方案3】:

    简短的回答是“不,这不可能。”前端代码(如 jQuery 和 AJAX)在客户端机器上运行,但 C# 函数是后端并在服务器上运行。它们之间没有直接联系。


    更长的答案是“不直接,但有办法做类似的事情。”您最简单的选择是使用 AJAX 发布到服务器上的另一个控制器/操作,然后处理响应。这接近你正在做的,但你有点偏离。而不是 url 是一个函数,url 必须是您网站上的实际 url。以/Functions/CallTargetFunction 为例,您将创建一个这样的控制器:

    public class FunctionsController : Controller
    {
        public ActionResult CallTargetFunction()
        {
            return Content(TargetFunction());
        }
    }
    

    请注意,这样做意味着访问http://yoursite.com/Functions/CallTargetFunction任何人都将获得该函数的结果。

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-31
      • 1970-01-01
      相关资源
      最近更新 更多