Html.checkbox控件表单集合值正在获得一些额外的真假值

时间:2013-08-27 06:10:37

标签: c# html asp.net-mvc checkbox

这是我的查看页面标记

<%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);                 
         }

}

我尝试了所有三种方式来获得正确的值,但它给了我一些真实的,错误的值,选中不匹配的复选框值

如果我选中所有三个复选框仍然会给出formcollection值 真,假真,假真,假

任何帮助都会受到重视。 提前谢谢。

5 个答案:

答案 0 :(得分:5)

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

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

例如:

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

Why does the CheckBoxFor render an additional input tag, and how can I get the value using the 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);
        }
    }

答案 3 :(得分:0)

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);
}

答案 4 :(得分:0)

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

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