首先让我说我是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)
答案 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方法。