[英]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.