为什么我的asp.net mvc形成POST而不是GETting?

时间:2011-01-04 16:50:40

标签: asp.net-mvc asp.net-mvc-2 forms post get

我的代码很简单:

    <% using(Html.BeginForm(FormMethod.Get)) %>
    <% { %>
        Search for in Screen Name and Email: <%: Html.TextBox("keyword", Request.QueryString["keyword"]) %>
        <button type=submit>Search</button>
    <% } %>

我遇到的问题是,当我提交此表单时,值不会添加到查询字符串中。相反,似乎表单是通过发布请求提交的。当我查看生成的HTML时,我有这个:

    <form action="/find/AdminMember/MemberList" method="post">
        Search for in Screen Name and Email: <input id="keyword" name="keyword" type="text" value="" />
        <button type=submit>Search</button>
    </form>

有谁知道为什么?对我来说,这看起来非常简单和直接。

3 个答案:

答案 0 :(得分:7)

BeginForm助手的正确签名是:

<% using(Html.BeginForm("SomeAction", "SomeController", FormMethod.Get)) %>
<% { %>
    Search for in Screen Name and Email: 
    <%: Html.TextBox("keyword", Request.QueryString["keyword"]) %>
    <button type="submit">Search</button>
<% } %>

当您编写BeginForm(FormMethod.Get)时,您基本上会调用this signature,其中routeValues参数与FormMethod.Get无关,并且使用POST作为默认动词。

答案 1 :(得分:3)

您将FormMethod.Get作为routeValues参数

传递

您必须限定actioncontroller才能设置表单标记的FormMethod

using(Html.BeginForm("action", "controller", FormMethod.Get))

FormExtensions.BeginForm Method

答案 2 :(得分:0)

看起来好像没有为BeginForm使用正确的重载,请检查here是否有各种重载。