jQuery发布到ASP.NET MVC控制器操作 - 不允许的方法

时间:2011-05-16 00:01:23

标签: jquery asp.net-mvc-2

我做错了什么?没有命中操作,错误是405 - >不允许用于访问路径“somepath”的HTTP谓词POST。

客户端脚本

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

filename只是一个'字符串',就像'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");


}

更新

这是我的global.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
      );

现在出现错误 - 找不到资源。该脚本位于模板创建的标准/ Scripts文件夹中。

2 个答案:

答案 0 :(得分:1)

你确定这是你控制和行动的途径吗?

Controllers/DecisionPoint/SaveApplicationState

因为通常“控制器”这个词没有出现在URL路径中,这就是jQuery需要用于访问此操作的确切URL路径。

试试这个:

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

问题是您已将路由映射到确切的URL,因此要发布到该操作,您需要重新创建URL。另请注意,我不知道这是否有意,但您的行动名称为SaveApplicationState但是在路线映射中您将行动列为ApplicationState。这需要保持一致。

答案 1 :(得分:1)

看起来您发布的网址不正确。在Asp.net MVC中,您不直接发布到控制器,而是发布到通常解析为控制器的路由。所以,例如,如果我有一个名为DecisionPointController的控制器,其中一个动作(方法)被称为ApplicationState(我将单词“保存”删除为更多RESTful,那么相应的网址将会是:
~/DecisionPoint/ApplicationState