复选框值使用htmlhelpers返回控制器

时间:2012-05-11 10:01:53

标签: asp.net-mvc-3

我在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" />

2 个答案:

答案 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 })