这是我的查看页面标记
<%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值 真,假真,假真,假
任何帮助都会受到重视。 提前谢谢。
答案 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给你一个匹配的假。
/// <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]);