表单在MVC中的后续提交操作中提交相同的复选框值

时间:2008-12-01 12:16:51

标签: asp.net-mvc forms checkbox

我已按照这个问题的建议......

[How to handle checkboxes in ASP.NET MVC forms?

...设置具有相同名称=“...”属性的多个复选框,并且表单在第一次提交时表现如预期。对表单的后续提交使用Guid值的原始数组,而不是正确发送已检查项值的新数组。

视图中的相关代码......

 <% foreach (ItemType itemType in ViewData.Model.ItemTypes) %>
        <%{ %>
        <li>
            <input id="selectedItems" name="selectedItems" type="checkbox" value="<%= itemType.Id%>" />
            <%= itemType.Description %></li>
        <%} %>

这会生成一系列复选框,每个项目对应一个,其中value =“...”属性设置为项目的ID。

然后在我的控制器操作中,方法签名是......

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SelectItems(Guid[] selectedItems)
{...}

第一次通过该方法时,selectedItems数组正确保存所选项目的Guid。但是随后提交的表单始终仍然包含在初始提交操作中首次选择的内容,无论您在提交表单之前对其检查的内容进行了哪些更改。这似乎与我的代码无关,因为检查MVC框架传递给方法的selectedItems数组证明框架似乎总是一遍又一遍地提交相同的值。

关闭浏览器,重新启动,在提交时选择不同的初始复选框,然后重新开始流程(最初选择的复选框ID 总是 selectedItems参数中的内容)。

假设我必须很粗,并且忽略了框架对表单值的某种缓存,但我发誓这在预览5中没有这样做。

让我疯狂,可能是简单的问题;任何想法????

2 个答案:

答案 0 :(得分:1)

FWIW,这是我的工作(不确定是否相关):

  // please MS, stop screwing around!!!!!!!!!!!!!!!
  string r = Request.Form["r"];

然后继续从'r'手动提取值。我仍然使用预览4,因为它们确实破坏了太多现有功能,并没有修复报告的错误。

答案 1 :(得分:0)

我不确定是什么导致了您的问题,但我有一个WAG ......

您是否在控制器的Post方法中使用RedirectToAction?

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SelectItems(Guid[] selectedItems)
{
  /* lol snip */
  return RedirectToAction("WhateverActionIsTheGetVersionOfThisPostAction");
}

它可能用于重置后台正在进行的任何操作......再次,疯狂猜测......