【问题标题】:Form Submits same checkbox values on subsequent submit action in MVC表单在 MVC 中的后续提交操作上提交相同的复选框值
【发布时间】:2010-09-24 17:51:58
【问题描述】:

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

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

...设置多个具有相同 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 中不会这样表现。

让我发疯,可能是一个简单的问题;有什么想法吗????

【问题讨论】:

    标签: asp.net-mvc forms checkbox


    【解决方案1】:

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

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

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

    【讨论】:

    • 它确实是 BETA1 版本中的一个错误。 (勉强地)与 Guid[] selectedItems = Request.Form["selectedItems"].Split(...) 一起使用,在我看来,这很丑:不利用框架应该为我提供的工具来做到这一点不需要那种管道代码:(
    • 顺便说一句,sn-p 直接来自我的代码 :) 我认为他们在 Preview 3 之后打破了它。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 威尔:是的,我正在这样做;同样的结果。此外,凭直觉,我将表单发布操作设置为完全不同的方法(而不是使用 AcceptVerbs 操作过滤器方法的方法)并获得相同的结果。可悲的是,混乱仍在继续。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-27
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多