1

首先让我说我对 ASP.NET 和 C# 非常陌生。我有一个简单的 Web 表单,其中包含要发送到代码隐藏页面的数据。这个想法是捕获数据并将其作为 JSON 对象发送到代码隐藏方法。请注意,这是通过 JavaScript/AJAX 完成的(参见下面的代码)。然后,代码隐藏方法将执行一个简单的 HTTP“PUT”请求来更新数据。.apsx 页面位于 Secure 文件夹中(使用 Secure Master)。不知道会不会影响方法调用?

以下是我到目前为止的代码。

JavaScript/AJAX:

var saveOptions =
{
  url: "Profile.aspx/UpdateVendor",
  type: "PUT",
  dataType: 'json',
  data: JSON.stringify({ vendor: ko.mapping.toJS(vendor) }),
  contentType: "application/json",

  success: function (response)
    {
    }
}

代码隐藏:

namespace PartyAtVendors.Secure
{
  [WebService]
  public partial class Profile : System.Web.UI.Page
  {
    [WebMethod]
    public static bool UpdateVendor(PartyAtApi.Models.Vendors vendor)
    {
      return true;
    }
  }
}

更新:

问题如下。不调用代码隐藏方法。当我运行和测试代码并使用 Chrome 的“检查元素”时,我收到错误:

PUT http://localhost:50671/Secure/Profile.aspx/UpdateVendor 404 (Not Found)
4

3 回答 3

1

这样的静态方法在 asp.net 中称为页面方法。

您可以在同一页面上将它们称为 javascript,如下所示:

string data = "{mydata:myvalue}";
PageMethods.UpdateVendor(data);

您需要在页面上有一个 ScriptManager 并且它应该启用 PageMethods

<asp:ScriptManager runat="server" EnablePageMethods="true">
</asp:ScriptManager>

页面方法必须在页面上定义。它不能在控件、母版页或基本页中定义。

PageMethods 仅支持 HTTP POST(即使您在没有 PageMethods 的 javascript 代理的情况下调用它们)。您可以在Scott Guthrie的这篇博文中阅读此安全限制的详细信息。使用 PUT 动词会导致 404 错误。

默认情况下,ASP.NET AJAX 1.0 仅允许在使用 JSON 调用 Web 方法时使用 HTTP POST 动词

于 2013-01-21T11:34:44.447 回答
0

嗨设法解决了问题所在。

我只是将 HTTP 方法更改为“POST”,如下所示:

var saveOptions =
{
  url: "Profile.aspx/UpdateVendor",
  type: "POST",
  dataType: 'json',
  data: JSON.stringify({ vendor: ko.mapping.toJS(vendor) }),
  contentType: "application/json",

  success: function (response)
  {
  }
}

$.ajax(saveOptions);

这似乎解决了问题,现在我可以使用 AJAX 将 JSON 数据发送到代码隐藏方法。

于 2013-01-22T04:53:23.267 回答
0

您的 webmethod 和 javascript 方法应该在同一页面上。

于 2013-01-21T11:45:54.377 回答