当发送jQuery帖子到MVC控制器获得404错误

时间:2015-05-15 13:42:24

标签: javascript jquery asp.net-mvc

我使用jQuery从视图发送到MVC后期操作

function DoSomething(passedId) {
   $.ajax({
             method: "POST",
             dataType: 'text',                       
             url: '/MyController/SomeAction/',
             data: { id: passedId}
          }).done(function (data) {
              //                        
  });
}

在MyController里面

 [HttpPost]
 public ActionResult SomeAction(int id)
 {
     ...
 }

在Firebug控制台中,我收到404错误。

6 个答案:

答案 0 :(得分:3)

在RFC 2616中,代码404表示服务器未找到与Request-URI匹配的任何内容。

所以你需要查看你的URL参数。 使用以下方法尝试MVC常规呼叫:

url: '@Url.Action("SomeAction", "MyController")',

答案 1 :(得分:3)

您没有说过您正在使用哪个版本的jquery。请检查jquery版本,如果此版本是< 1.9.0你应该而不是

method: "POST" 

使用

type: "POST"

这是方法的别名,根据jquery official documentation,如果您使用1.9.0之前的jQuery版本,则应使用type。

function DoSomething(passedId) {    
    $.ajax({
             type: "POST",
             dataType: 'text',                       
             url: '/MyController/SomeAction/',
             data: { id: passedId}
           }).done(function (data) {                                        
               ...
          });
}

经测试以上代码并且可以正常工作(每个请求都在mvc controller http post SomeAction action 中输入。)

答案 2 :(得分:1)

解决404问题:

  1. 有几个选项可以解决这个问题。您无法找到控制器/操作的描述方式。

    - 如果您在控制器中的视图中,您尝试呼叫的操作位于该控制器中,则:

    网址:' SomeAction',

    - 例如,如果你试图从另一个控制器,OtherController调用一个动作,那么:

    网址:'其他/ SomeAction',

    - 要添加另一个答案,如果你在视图中调用你的ajax(而不是在javascript文件中)那么你也可以使用(对于名为SomeController的控制器):

    网址:' @ Url.Action(" SomeAction","部分")',

  2. 其他注意事项:

    1. 您没有为json指定内容类型(contentType表示您要发送的内容):

      contentType:" application / json;字符集= UTF-8",

    2. 我无法根据您的行动来判断您是否期待“'或者是其他东西。但是,除非期待' json',否则我会删除数据部分。

    3. 您需要对数据进行字符串化

      JSON.stringify(data:{id:passedId}),

    4. 最后,我希望它看起来像: 函数DoSomething(passedId){

      var url = "SomeAction"; //if action is in OtherController then: "Other/SomeAction"
      $.ajax({
                   method: "POST",                       
                   url: url,
                   data: JSON.stringify({ id: passedId}),
                   contentType: "application/json; charset=utf-8"
                }).done(function (data) {
                    //                        
        });
      }
      

答案 3 :(得分:0)

此处开头的斜线表示绝对路径,而不是相对路径。

/MyController/SomeAction/

您应该包含网址或相对路径..也许

'MyController/SomeAction/ajax.php'

或完整网址

'http://example.com/myajaxcontroller/someaction/ajax.php'

或从其他人那里偷来的回答

url: '@Url.Action("SomeAction", "MyController")',
  

为了解决这里的其他人,我不认为数据类型是   问题...... OP说"我收到404错误。"

  • contentType是您要发送的数据类型,因此 应用/ JSON; charset = utf-8是一个常见的 应用程序/ x-WWW窗体-urlencoded; charset = UTF-8,即 默认

  • dataType是您对服务器的期望:json,html, 文本等,jQuery将使用它来弄清楚如何填充成功函数的参数。

答案 4 :(得分:-1)

使用以下ajax call

var datum = { id: passedId };
$.ajax({
    url: url,                        // your url
    type: 'POST',
    data: JSON.stringify(datum),
    contentType: 'application/json; charset=utf-8',
    beforeSend: function () {

    },
    complete: function () {

    },
    success: function (user, status, XHR) {

    },
    error: function (req, status, error) {

    }
});  

<强>更新
public ActionResult SomeAction(int id){}应该接受string参数而不是int

答案 5 :(得分:-1)

以这种方式编写代码:

function DoSomething(passedId) {
            $.ajax({
                url: 'yourController/SomeAction',
                type: 'POST',
                data: { id: passedId},
                dataType: 'json',
                error: function (ex) {alert(ex.responseText)},
                success: function (data)
                {
                    if (data.Results != null) {
                        //use the return values                                
                        });
                    }
                }
            });
        }

和控制器

public JsonResult SomeAction(int id)
    {
        try
        {   
            return Json(new { Results = "Text To return or send some object or an list, etc"}, JsonRequestBehavior.AllowGet);
        }
        catch (Exception)
        {                
            throw;
        }
    }

最后,检查控制器是否有各自的视图。 :) 并且更新了“jQuery”库。 以防万一。