你對通用列表的問題很具誤導性,我懷疑它與你真正的問題無關。
取決於您在視圖內如何生成可能或不可能的複選框。如果您直接使用<input type="checkbox">
標記對其進行硬編碼,那麼未檢查的複選框的值將永遠不會發送到服務器 - 這就是HTML複選框的工作原理。在這種情況下,你將無法獲得所有的值。另一方面,如果您使用Html.CheckBoxFor
幫助程序生成它們,那麼您會注意到此幫助程序爲每個複選框添加一個隱藏字段以發送所有值。儘管這個幫助器在布爾值上運行。
因此,我建議你創建一個包含2個屬性視圖模型:一個拿着指示用戶是否在視圖中選擇這個值是不是您所感興趣的值和一個布爾值屬性:
public class ItemViewModel
{
public string Value { get; set; }
public bool Checked { get; set; }
}
然後讓具有這些項目的集合視圖模型:
public class MyViewModel
{
public ItemViewModel[] Items { get; set; }
}
現在你的視圖中可以呈現這樣的價值觀:
@model MyViewModel
@using (Html.BeginForm())
{
for (var i = 0; i < Model.Items.Length; i++)
{
<div>
@Html.CheckBoxFor(x => x.Items[i].Checked)
@Html.HiddenFor(x => x.Items[i].Value)
</div>
}
<button type="submit">OK</button>
}
終於控制器動作,這種形式將提交給,你將能夠獲得所有的值內:
[HttpPost]
public ActionResult SomeAction(MyViewModel model)
{
foreach (var item in model.Items)
{
// here you could use item.Checked and item.Value
}
...
}
「獲得所有值」 - *什麼*值,你說什麼? – Dennis
當複選框被選中時,我得到行ID。 –