好的,所以到目前为止我的网站一直在正常工作,我不确定我改变了什么。我有一个jQuery AJAX调用,它将优惠券代码发送到服务器,并检索一个数字(这是折扣)。
Webmethod不再被解雇,而是正在触发webmethod所在页面的Page_load。为什么?我能检查什么?我该怎么办?
这是我点击按钮时的处理程序
$('div#code_apply_btn').click(function() {
$(this).html('PLEASE WAIT');
getpromocode();
});
这是AJAX调用
function getpromocode(){
var pcode = $('input#input_circuitcode').val();
var hid = parseInt($('input#ss_id_h').val());
$.ajax({
type: "POST",
url: "register.aspx/get_promocode",
data: '{"promo":"' + pcode + '", "uid":' + hid + '}',
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (msg) {
if (msg.d != -1) {
applydiscount(msg.d);
$('div#reg_circuit').show();
$('div#circuit_promo').hide();
$('div#reg_circuit').click();
}
else {
$('input#input_circuitcode').val('');
$('div#code_apply_btn').html('APPLY CODE');
}
},
error: function (msg) {
alert(msg);
}
});
}
这是webmethod
[WebMethod]
public static int get_promocode(string promo, int uid)
{
return DAC.GetPromoCode(promo);
}
从不调用web方法,但是Page_load事件会触发并遍历所有内容,然后它会收到500错误,因为它不应该被调用,并且没有它需要的所有数据。
编辑:
使用网络方法的所有其他网页都可以正常使用。这只是这个页面。
另一个奇怪的行为:在我开始输入“register.aspx”时,在chrome中,调用Page_load。我的所有其他页面都很好,这不会发生。
答案 0 :(得分:5)
我找到了问题的答案:
因为我有VS2008,所以我只能使用.Net 3.5。然而我的服务器有.Net 4.0或2.0无论出于什么原因我无法选择3.5,因为我希望如此。所以每次我移动我的项目时我都要更改web.config,因为默认的3.5配置充满了4.0不喜欢的东西。
所以我记得我已经把web.config清空到仍然在3.5中运行的准系统版本,这就是问题所在。我把它缩小到这些我从3.5本地运行的版本中排除的行。
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule,
System.Web.Extensions, Version=3.5.0.0, Culture=neutral,
PublicKeyToken=31BF3856AD364E35"/>
</httpModules>
我想脚本模块是将jQuery请求传递给Web方法而不是默认页面处理程序的方法。你去..但没有明显的错误或任何东西,它只是没有用。
答案 1 :(得分:1)
您必须在该页面上的ScriptManager中使用EnablePageMethods =“true”。