繁体   English   中英

Html.checkbox 控件表单集合值带有一些额外的真假值

[英]Html.checkbox control form collection values are getting with some extra true false values

这是我的视图页面标记

<%for (int i = 0; i < 3; i++)
  { %>


  <%:Html.CheckBox("Test") %>

<%} %>

这是我的控制器,我从 formcollection 对象中获取值

public ActionResult CreateTaxMaster(TaxMaster objTaxMaster ,bool [] Test,FormCollection form)
{ 
    string LocalCheckboxValues = string.Empty;
    foreach (var key in form.AllKeys)
    {
         if (key.Contains("Test"))
         {
              LocalCheckboxValues = LocalCheckboxValues + form.Get(key);                 
         }

}

我尝试了所有三种方法来获得正确的值,但它给了我一些真、假值与复选框的选定值不匹配

如果我选择了所有三个复选框,它仍然会在 true、false、true、false、true、false 中给出 formcollection 值

任何帮助将被应用。 提前致谢。

它因为选中复选框时,传递的值是“true,false”

使用Contains("true"); 您可以检查复选框是否被选中

例如:

bool bChecked = form[key].Contains("true");

看看复选框被选中后发生了什么,生成隐藏字段以存储用于将其发送回服务器的错误值,然后我按照以下顺序处理这种情况,我已经删除了表单集合的下一个元素对象是隐藏字段的值。 如下

if(Convert.ToBoolean(form["Test"])== true){form["Test"].RemoveAt(i+1)}

如果没有隐藏,则只会发布选中的值。 如果您使用 bool[] 作为参数,您将获得复选框和隐藏值。 所以 false 给你一个条目,true 给你一个匹配的 false。

为什么 CheckBoxFor 会呈现额外的输入标签,以及如何使用 FormCollection 获取值?

    /// <summary>
    /// If you posted an array of checkboxes to a controller, this will extract the values you expect.
    /// </summary>
    /// <param name="arrayOfCheckboxesFromController">An array of checkboxes passed to the controller</param>        
    /// <remarks>with checkboxes, true values come with a twin false so remove it</remarks>
    private static void GetCheckboxArrayValues(IList<bool> arrayOfCheckboxesFromController)
    {
        for (var i = 0; i < arrayOfCheckboxesFromController.Count(); i++)
        {
            if (!arrayOfCheckboxesFromController[i]) continue;

            // This assumes the caller knows what they are doing and passed in an array of checkboxes posted to a controller
            arrayOfCheckboxesFromController.RemoveAt(i + 1);
        }
    }
List<bool> bools = Request["Test"].Split(',').Select(n => string.Compare(n, "true", true) == 0? true : false).ToList();

for (int i = 0; i < bools.Count(); ++i)
{
    if (bools[i]) bools.RemoveAt(i + 1);
}

MVC 呈现一个具有相同 ID 的隐藏复选框,因此我们获得了两个值。 可见的是第一个,因此您可以使用逗号和拆分来获得它(如果只有一个值也可以使用):

bool ActualValue = Convert.ToBoolean(collection["BoolFieldName"].ToString().Split(',')[0]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM