Ajax.BeginForm指定“GET”类型的发布

时间:2013-10-08 12:43:17

标签: c# html5 forms asp.net-mvc-4 .net-4.5

我的观点如下:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>

@using (Ajax.BeginForm(new AjaxOptions { HttpMethod = "Get", InsertionMode = InsertionMode.Replace, UpdateTargetId = "DisplayPatients" }))
{
    <input type="search" name="searchTerm" />
    <input type="submit" value="Do Search" />
}  

每当我尝试编译并查看我得到的html页面的来源时,我明白了,

<form action="/" data-ajax="true" data-ajax-method="Get" data-ajax-mode="replace" data-ajax-update="#DisplayPatients" id="form0" 
   method="post">    

但是,在我的Ajax.BeginForm中,我指定了HttpMethod = Get。尽管如此,我在输出html页面中得到了method = "post"

任何想法为什么?提前谢谢。

编辑:

我甚至在浏览器中通过view-source检查了我的网页来源。这表明:

<script src="/Scripts/jquery.unobtrusive-ajax.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.unobtrusive.js" type="text/javascript"></script>

<form action="/" data-ajax="true" data-ajax-method="Get" data-ajax-mode="replace" data-ajax-update="#DisplayPatients" id="form0" method="post">    <input type="search" name="searchTerm" />

(注意脚本(jquery-unobstrusive)实际上就在那里)

2 个答案:

答案 0 :(得分:6)

  

但是,在我的Ajax.BeginForm中,我指定了HttpMethod = Get。尽管   就是这样,我在输出html页面中得到了method =“post”。

jquery.unobtrusive-ajax.js脚本忽略method属性并使用data-ajax-method(如果存在)。所以实际的请求将是GET。查看您的Google Chrome开发者控制台的“网络”标签,查看。

答案 1 :(得分:3)

即使包含jQuery文件有效,我仍然觉得在那里安装POST是不正确的。您可以通过在html属性中指定它来“覆盖”它:

@using (Ajax.BeginForm("Action", "Controller", null, new AjaxOptions { HttpMethod = "GET", InsertionMode = InsertionMode.Replace, UpdateTargetId = "results" }, new { @id = "search", @role = "search", @method="get" }))

您可以使用此hack将其设置为null或空白。仅供参考。