我在VIEW中有以下代码,然后是提交按钮。我的视图中有很多这样的复选框,因此用户可以根据自己的意愿点击。
@Html.CheckBox("code" + l_code, false, new { Value = @item.expertiseCode })
在我的控制器中我有fll。,这是HTTPPost方法
public ActionResult RegisterSP(RegisterModel model, FormCollection collection)
然而,在调试时,我看到所有复选框都被传递回控制器,而不仅仅是被点击的复选框。我只想要点击的那些并忽略其余部分,我需要将这些添加到数据库中。此外,传入的checbox值包含TRUE / FALSE。因此,错误值也被添加到DB中。如果我使用下面的方法(不使用htmlHelper),我没有上述问题。但我不喜欢使用htmlHelper:
<input type="checkbox" name="code@(l_code)" value="@item.expertiseCode" />
答案 0 :(得分:1)
如果您有一个Checkboxes集合,请创建一个像这样的ViewModel
public class ExpertiseCodeViewModel
{
public string Name { set;get;}
public int ExpertiseId { set;get;}
public bool IsSelected { set;get;}
}
现在在您的主ViewModel中,将此集合添加为属性
public class UserViewModel
{
public List<ExpertiseCodeViewModel > Expertises{ set; get; }
public UserViewModel()
{
if(this.Expertises==null)
this.Expertises=new List<ExpertiseCodeViewModel>();
}
}
在您创建名为ExpertiseCodeViewModel的编辑器模板
中@model ExpertiseCodeViewModel
@Html.CheckBoxFor(x => x.IsSelected)
@Html.LabelFor(x => x.IsSelected, Model.Name)
@Html.HiddenFor(x => x.ExpertiseId )
将其包含在主视图中
@model UserViewModel
@using (Html.BeginForm())
{
//other elements
@Html.EditorFor(m=>m.Expertises)
<input type="submit" value="Save" />
}
在HTTPPost Action方法中,
[HttpPost]
public ActionResult Save(UserViewModel model)
{
List<int> items=new List<int>();
foreach (ExpertiseCodeViewModel objItem in model.Expertises)
{
if (objPVM.IsSelected)
{
//you can get the selected item id here
items.Add(objItem.ExpertiseId);
}
}
}
答案 1 :(得分:0)
尝试
@Html.CheckBox("code" + l_code, false, new { @value = item.expertiseCode })
或
string name = "code" + l_code;
@Html.CheckBox(name, false, new { @value = item.expertiseCode })