2011-05-16 13 views
1

私は間違っていますか?アクションがヒットせず、エラーは405です - > "somepath"というパスへのアクセスに使用されたHTTP動詞POSTは許可されていません。jQuery ASP.NET MVC Controllerへの投稿アクション - メソッドは使用できません

クライアントスクリプト

$.post('/DecisionPoint/ApplicationState', { fileName: fileName, stateString: e }); 

ファイル名は 'E'

コントローラーアクション

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult SaveApplicationState(string fileName, string stateString) 
{ 
      string filePath = GetDpFilePath(fileName); 
      HtmlDocument htmlDocument = new HtmlDocument(); 
      htmlDocument.Load(filePath); 
      HtmlNode stateScriptNode = 
       htmlDocument.DocumentNode.SelectSingleNode("/html/head/script[@id ='applicationState']"); 
      stateScriptNode.InnerHtml = "var applicationStateJSON =" + stateString; 
      htmlDocument.Save(filePath); 

      return Json("State Updated"); 


} 

UPDATE

は、これは私の世界であるとして単に '文字列' です。アサックス

routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
     ); 

     routes.MapRoute(
      "DecisionPoint", // Route name 
      "{controller}/{action}/{fileName}/{stateString}", // URL with parameters 
      new { controller = "DecisionPoint", action = "ApplicationState", fileName = UrlParameter.Optional, stateString = UrlParameter.Optional} // Parameter defaults 
    ); 

エラーが発生しました - リソースが見つかりません。スクリプトは、テンプレートが作成する標準/スクリプトフォルダにあります。

答えて

1

これがコントロールと操作のパスですか?

Controllers/DecisionPoint/SaveApplicationState 

ため、通常の単語「コントローラ」は、URLパスに表示されない、そしてそれはjQueryのは、このアクションにアクセスするための正確なURLパスを必要とするものです。

はこれを試してみてください:

string url = "/DecisionPoint/SaveApplicationState/" + filename + "/" + e; 
jQuery.post(url); 

問題は、あなたが正確なURLへのルートをマップしたので、そのアクションに投稿するためには、あなたはURLを再作成する必要があります。また、これは意図的かどうかわかりませんが、アクション名はSaveApplicationStateですが、ルートマッピングではアクションはApplicationStateと表示されています。これは一貫している必要があります。

+0

。私は質問を更新しました – Nick

+0

あなたが質問に投稿したばかりのコードが質問へのアプローチ全体を変更するので、それはうまくいきません –

+0

あなたは正しいです..今、私は悪いと言いますリクエスト – Nick

1

あなたが投稿しているURLが正しくないように見えます。 Asp.net MVCでは、コントローラに直接ポストしないで、通常はコントローラに解決されるルートにポストします。私はアクション(メソッド)でDecisionPointControllerと呼ばれるコントローラを持っていたのであれば、例えば、ApplicationStateは(私は言葉「保存」RESTfulよりであることを落とさと呼ばれる、対応するURLは次のようになります
~/DecisionPoint/ApplicationState「doesnの

+0

あなたのアドバイスを受け取り、アクションを 'ApplicationState'に変更しました。私の質問を更新して、global.asaxファイルを表示しました。なぜURLが間違っているのかわからない。私はそれを '/ Controller/Action' stilに変更した。いいえいいえ – Nick

+0

心配しないで!上記のコードでは、 'GET'ではなく' POST'を試みています。そうすることで、URLにではなく、要求に値( 'fileName'と' stateString')を渡しています。つまり、個別のルートは必要ありません。基本的なルーティングに関する詳細については、Scott Guthrieの[this post](http://weblogs.asp.net/scottgu/archive/2007/11/13/asp-net-mvc-framework-part-1.aspx)を参照してください。コントローラの仕組みカスタムルートを削除した場合、それは機能しますか?また、FYIと同じように、経路は順番に一致しているので、常にカスタム経路をデフォルト経路の上に置きます。 –

関連する問題