【问题标题】:Call method in code-behind (secure page) from client (JavaScript)从客户端(JavaScript)调用代码隐藏(安全页面)中的方法
【发布时间】:2013-01-21 11:11:13
【问题描述】:

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

【问题讨论】:

  • 有什么问题?您收到错误消息吗?等等等等等等。
  • @GrantThomas,看看我的编辑。

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


【解决方案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 代理的情况下调用它们)。您可以在此blog post by Scott Guthrie 中阅读此安全限制的详细信息。使用 PUT 动词会导致 404 错误。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您好设法解决了问题。

      我只是将 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 数据发送到代码隐藏方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-27
        • 1970-01-01
        • 2011-06-15
        • 2018-02-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多