我在显示的表单上有以下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;作为表单上显示的四个复选框的前缀。
我在这里不理解什么?
答案 0 :(得分:4)
Request.Form.Keys.Count = 0
可能有两种可能的解释:
application/json
而不是application/x-www-form-urlencoded
(如果您使用AJAX可能会发生)我建议您使用FireBug查看POST请求中包含的内容以及是否有任何值。您尚未显示表单定义以及提交方式。如果你正在使用AJAX进行POST,那么可能存在问题所在。
以下是FireBug中有效请求的示例: