1

我的视图中有以下代码,然后是提交按钮。在我看来,我确实有很多这样的复选框,以便用户可以随意点击。

@Html.CheckBox("code" + l_code, false, new { Value = @item.expertiseCode })

在我的控制器中,我有 flll.,这是 HTTPPost 方法

public ActionResult RegisterSP(RegisterModel model, FormCollection collection)

但是,在调试时,我看到所有复选框都被传递回控制器,而不仅仅是被点击的那些。我只想要那些被点击的并忽略其余的,因为我需要将它们添加到数据库中。此外,传入的复选框值包含 TRUE/FALSE。因此,错误值也被添加到数据库中。如果我使用下面的方法(不使用 htmlHelper),我没有上述问题。但我喜欢使用 htmlHelper:

<input type="checkbox" name="code@(l_code)" value="@item.expertiseCode" />
4

2 回答 2

1

如果您有一组复选框,请像这样创建一个 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);

     }
   } 
}
于 2012-05-11T10:31:15.490 回答
0

尝试

@Html.CheckBox("code" + l_code, false, new { @value = item.expertiseCode })

或者

string name = "code" + l_code;
@Html.CheckBox(name, false, new { @value = item.expertiseCode })
于 2012-05-11T10:08:34.053 回答