Ajax提交获取404错误但URL正确

时间:2013-02-13 17:58:24

标签: asp.net-mvc asp.net-ajax http-status-code-404

我有一个带有提交按钮的ajax表单,但是当我点击提交按钮时,我得到404页面未找到错误。

我的部分观点:

@using (Ajax.BeginForm("Index", "Maps", null, ajaxOptions, new { @class = "form-search" }))
{
    ...
    ...
    <button type="submit" class="btn">Search</button>
}

ajaxOptions变量定义如下:

var ajaxOptions = new AjaxOptions
{
    InsertionMode = InsertionMode.Replace,
    UpdateTargetId = "filter-results",
    LoadingElementId = "filter-loading",
    LoadingElementDuration = 2000,
    OnFailure = "showAjaxError",
    Url = Url.Action("Index")
};

这在我的浏览器(Chrome)中呈现如下:

<form action="/Maps" class="form-search" data-ajax="true" data-ajax-failure="showAjaxError" data-ajax-loading="#filter-loading" data-ajax-loading-duration="2000" data-ajax-mode="replace" data-ajax-update="#filter-results" data-ajax-url="/Maps" id="form0" method="post">    <div class="well well-small">
        <div class="input-append">
            <input type="text" class="span3">
            <button type="submit" class="btn">Search</button>
        </div>
        <div class="input-prepend pull-right">
            <button type="submit" class="btn">Items Per Page</button>
            <input type="number" name="ItemsPerPage" class="span1" value="10">
        </div>
    </div>
</form>

404错误说:

Requested URL: /Maps

我可以将其粘贴到我的浏览器中并且可以正常工作:

http://localhost:7374/Maps

我想我正在引用正确的javascript文件 - 查看我看到的页面源:

<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.unobtrusive-ajax.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.0/jquery.validate.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.10.0/jquery-ui.min.js"></script>

在我的Web.config中,我有这个:

<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />

3 个答案:

答案 0 :(得分:3)

  1. 检查操作MapsController中的控制器Index是否仅接受HttpGet。因为您使用POST方法
  2. 发送
  3. 需要你Url = Url.Action("Index")
  4. 请参阅this question,版本1.9中的jQuery没有.live方法,文件jquery.unobtrusive-ajax.js使用此方法。如果你需要使用jQuery 1.9+,你必须改变它。
  5. 第3点的西班牙语解决方案(link)。

答案 1 :(得分:0)

也许您的控制器操作标有HttpGetAttribute?据我所知,如果您使用的是Ajax助手,您还应该添加对microsoft的ajax脚本的引用:MicrosoftAjax.js,MicrosoftMvcAjax.js和MicrosoftMvcValidation.js

答案 2 :(得分:0)

出于某种原因,这不适用于jquery 1.9.0 1.9.1 ,但与之前的版本相同。

使用:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>

不起作用(404错误):

<script src="http://code.jquery.com/jquery-latest.js"></script>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>