回发时Request.Forms.Keys.Count = 0

时间:2011-02-16 10:38:52

标签: asp.net-mvc-3 http-post

我在显示的表单上有以下HTML

<fieldset>
<legend>Edit User Roles</legend>
<ul>
    <% foreach (string role in (string[]) ViewData["roles"]){ %>
        <li>
            <div id="Div4" class="grid_6">
                <div id="Div5" class="grid_2 alpha" style="font-weight: bold;">
                    <%= Html.CheckBox("role." + role,  Roles.IsUserInRole(Model.UserName, role))%>
                </div>
                <div id="Div6" class="grid_3 omega" style="font-family: Verdana; font-size: 10pt;">
                    <label for="role.<%: role %>">
                        <%: role %></label><br />
                </div>
            </div>
        </li>
    <% } %>
</ul>
</fieldset>

我的控制器中有以下代码

        [HttpPost]
    public ActionResult EditUser( string id, bool approved )
    {
        int i = Request.Form.Keys.Count 

        foreach (string key in Request.Form.Keys)
        {
            if (key.StartsWith( "role." ))
            {
                // Do something
            }
        }

        MembershipUser membershipUser = Membership.GetUser( id );

        return View( membershipUser );
    }

如果我破解代码并进行探索,我发现Request.Form.Keys.Count = 0,尽管应该至少有4个密钥用&#34; role创建。&#34;作为表单上显示的四个复选框的前缀。

我在这里不理解什么?

1 个答案:

答案 0 :(得分:4)

Request.Form.Keys.Count = 0可能有两种可能的解释:

  • POST正文中未发送任何值
  • 您使用了一些特殊内容类型,例如application/json而不是application/x-www-form-urlencoded(如果您使用AJAX可能会发生)

我建议您使用FireBug查看POST请求中包含的内容以及是否有任何值。您尚未显示表单定义以及提交方式。如果你正在使用AJAX进行POST,那么可能存在问题所在。

以下是FireBug中有效请求的示例:

enter image description here