2011-05-16 40 views
1

我在做什么错?没有命中该操作,错误是405 - >不允许使用HTTP动词POST来访问路径“somepath”。jQuery发布到ASP.NET MVC控制器操作 - 不允许的方法

客户端脚本

$.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

这是我的世界。 ASAX。

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

那并不是。 t似乎也工作..我更新了这个问题 – Nick 2011-05-16 00:20:04

+0

这是行不通的,因为你刚才在问题中发布的代码改变了整个问题的解决方法。 – 2011-05-16 00:29:06

+0

好吧,你是对的..现在它说我有一个坏请求 – Nick 2011-05-16 00:36:59

1

看起来好像您发布的网址不正确。在Asp.net MVC中,您不会直接发布到控制器,而是发布到通常会解析为控制器的路由。因此,举例来说,如果我有一个叫DecisionPointController控制器的动作(方法)称为ApplicationState(我放弃了单词“保存”更RESTful,则对应的网址是:
~/DecisionPoint/ApplicationState

+0

我接受了您的建议并将操作更改为'ApplicationState'我更新了我的问题以显示我的global.asax文件。不明白为什么网址不正确..我将它改为'/ Controller/Action'stil l不好 – Nick 2011-05-16 00:19:01

+0

不用担心!在上面的代码中,你正在尝试一个'POST',而不是'GET'。通过这样做,您将在请求中传递值('fileName'和'stateString'),而不是在URL中。这意味着你不需要单独的路由。请查看Scott Guthrie的[这篇文章](http://weblogs.asp.net/scottgu/archive/2007/11/13/asp-net-mvc-framework-part-1.aspx)以获得更多关于基本路由的信息以及控制器如何工作。如果您删除了自定义路线,它是否工作?此外,就像参考一样,路线是按顺序匹配的,因此始终将自定义路线放在默认路线上方。 – 2011-05-16 22:21:58

相关问题