Request.IsAjaxRequest在POST上返回false

时间:2009-11-17 22:48:50

标签: asp.net-mvc ajax

我的问题类似于this one,我遇到了类似的问题,但一个很大的区别是我使用的是Ajax辅助方法(Ajax.ActionLinkAjax.BeginForm)而不是用jQuery处理AJAX。

Request.IsAjaxRequest()对于接受http GET的Edit方法返回true,但对于接受http POST的Edit方法返回false。

GET请求来自:

生成的链接
<%=Ajax.ActionLink(item.Name, "Edit", "Device",
     new { id = item.ID },
     new AjaxOptions { HttpMethod= "GET", UpdateTargetId = "ModalDialog" },
     new { name = item.Name })%>

POST请求来自此代码生成的表单:

<% using (Ajax.BeginForm("Edit", "Device", new { id = Model.ID }, new AjaxOptions { OnComplete = "CloseDialog" }))
{ %>
    <fieldset>
         <h4>
            <label for="Name">Name</label>
        </h4>
        <%= Html.TextBox("Name", null, new { @class = "required" })%>

        <h4>
            <input type="checkbox" id="IsActive" name="IsActive" <% if (Model.IsActive)%> <%=Html.Encode("checked=''")%> />
            <label for="IsActive">Unit Is Active</label>
        </h4>
        <p>
            <input type="submit" value="Save" />
        </p>
    </fieldset>
<% } %>

这是设计,我做错了什么,我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

那里的一切看起来都很好。一想法:在AjaxOptions中为OnComplete指定了一个“CloseDialog”函数。是否已创建并可访问表单?如果没有,MvcAjax脚本将抛出错误,表单将恢复为常规回发。

答案 1 :(得分:0)

听到这个消息我很惊讶。您可以为Firefox安装Firebug插件,并从NET选项卡监控网络流量。只有aSync请求才会显示在XHR子选项卡中。