我有一个旧项目asp.net,它使用Ajax.AjaxMethod()从Javascript调用服务器端代码。它之前工作正常(之前我的意思是几年前),但现在它已经停止工作了。
这是我的C#代码:
public partial class Signup : System.Web.UI.Page{
protected void Page_Load(object sender, EventArgs e){
Ajax.Utility.RegisterTypeForAjax(typeof(Signup));
}
[Ajax.AjaxMethod()]
public DataTable fillStateDdl(int countryid)
{
objState = new MyClass.State();
DataTable dtState = new DataTable();
objState.CountryId = Convert.ToInt32(countryid);
dtState = objState.GetStateCountry().Tables[0];
return dtState;
}
}
这是我的JavaScript代码:
function fillStates(countryid)
{
var cntryid=countryid.options[countryid.selectedIndex].value;
var response=Signup.fillStateDdl(cntryid);
var states=response.value;
}
在javascript中我收到“Microsoft JScript错误:'注册'未定义”错误消息。我在这里错过了什么吗?
答案 0 :(得分:1)
你最好分开你的AjaxMethod。
public partial class Signup : System.Web.UI.Page{
protected void Page_Load(object sender, EventArgs e){
Ajax.Utility.RegisterTypeForAjax(typeof(YourAjaxClass));
}
}
public class YourAjaxClass {
[Ajax.AjaxMethod()]
public DataTable fillStateDdl(int countryid)
{
objState = new MyClass.State();
DataTable dtState = new DataTable();
objState.CountryId = Convert.ToInt32(countryid);
dtState = objState.GetStateCountry().Tables[0];
return dtState;
}
}
您不能继承自System.Web.Ui.Page的RegisterTypeForAjax对象。 它不起作用。
然后你可以从javascript调用它。
function fillStates(countryid)
{
var cntryid=countryid.options[countryid.selectedIndex].value;
var response=YourAjaxClass.fillStateDdl(cntryid);
var states=response.value;
}
答案 1 :(得分:0)
我认为你缺少ajax的http处理程序。在system.web
下的web.config中添加这些<system.web>
<--
Other configuration
-->
<httpHandlers>
<add verb="POST,GET" path="*.ashx" type="Ajax.AjaxHandlerFactory,Ajax"/>
</httpHandlers>
</system.web>