来自客户端的代码隐藏(安全页面)中的调用方法(JavaScript)

时间:2013-01-21 11:11:13

标签: c# javascript asp.net ajax code-behind

首先让我说我是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)

3 个答案:

答案 0 :(得分:1)

这种静态方法在asp.net中称为Page Methods。

你可以在同一页面上通过以下方式将这些形式称为javascript:

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

您需要在页面上安装ScriptManager,并且应该启用PageMethods

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

必须在页面上定义页面方法。它无法在控件,母版页或基页中定义。

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

  

ASP.NET AJAX 1.0默认只允许使用HTTP POST动词   使用JSON调用Web方法时

答案 1 :(得分:0)

您的网络方法&amp; javascript方法应该在同一页面上。

答案 2 :(得分: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数据发送到codebehind方法。