0

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

[如何处理 ASP.NET MVC 表单中的复选框?

...设置多个具有相同 name="..." 属性的复选框,并且表单在第一次提交时表现如预期。表单的后续提交使用原始的 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 中不会这样表现。

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

4

2 回答 2

1

FWIW,这是我所做的(不确定是否相关):

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

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

于 2008-12-01T12:29:26.360 回答
0

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

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

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

它可能有助于重置背景中发生的任何事情......再次,疯狂的猜测......

于 2008-12-01T13:05:06.990 回答