0

Ajax.AjaxMethod() を使用して Javascript からサーバー側コードを呼び出す古いプロジェクト asp.net があります。以前は(そして何年も前に)正常に機能していましたが、現在は機能しなくなりました。

これは私の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 エラー: 'サインアップ' は定義されていません」というエラー メッセージが表示されます。ここで何か不足していますか?

4

2 に答える 2

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;
}
于 2013-02-05T09:09:28.110 に答える
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>
于 2012-06-26T17:53:33.203 に答える