Asp.net mvc 3 回发时Request.Forms.Keys.Count=0

Asp.net mvc 3 回发时Request.Forms.Keys.Count=0,asp.net-mvc-3,http-post,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"> <di

我在显示的表单上有以下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>
如果我中断代码并进行探索,我会发现Request.Form.Keys.Count=0,尽管应该至少有4个键是用表单上显示的四个复选框中的“role.”作为前缀创建的


我在这里不明白什么?

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

  • POST正文中未发送任何值
  • 您使用了一些特殊的内容类型,例如
    application/json
    ,而不是
    application/x-www-form-urlencoded
    (如果使用AJAX,可能会发生这种情况)
我建议您使用查看POST请求中包含的内容以及是否有任何值。您还没有显示表单定义,也没有显示提交表单的方式。如果你是用AJAX发帖的话,问题可能就在这里

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


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

  • POST正文中未发送任何值
  • 您使用了一些特殊的内容类型,例如
    application/json
    ,而不是
    application/x-www-form-urlencoded
    (如果使用AJAX,可能会发生这种情况)
我建议您使用查看POST请求中包含的内容以及是否有任何值。您还没有显示表单定义,也没有显示提交表单的方式。如果你是用AJAX发帖的话,问题可能就在这里

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


我正在提交表单,因此:
子表单上没有使用AJAX或JSON。我尝试过使用Firefox。一开始它是有效的,但现在我得到了以下信息:代理服务器拒绝连接。@xiecs,问题在于您的数据不在表单中,而是作为查询字符串的一部分,因此Request.form将为空。您可以使用
Request[“approved”]
来获取它们。因此,问题似乎是我正在使用Html.BeginForm正确生成按钮,这意味着我丢失了表单其余部分的Request.Form.Keys数据。我需要这样做,因为我有第二个按钮来生成另一个按钮。为什么没有一个Html.Button对象来提供所需的灵活性?我提交表单是这样的:
子表单上没有使用AJAX或JSON。我尝试过使用Firefox。一开始它是有效的,但现在我得到了以下信息:代理服务器拒绝连接。@xiecs,问题在于您的数据不在表单中,而是作为查询字符串的一部分,因此Request.form将为空。您可以使用
Request[“approved”]
来获取它们。因此,问题似乎是我正在使用Html.BeginForm正确生成按钮,这意味着我丢失了表单其余部分的Request.Form.Keys数据。我需要这样做,因为我有第二个按钮来生成另一个按钮。为什么没有提供所需灵活性的Html.Button对象?
        [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 );
    }