传递多个复选框值&基于MVC 4中选中的复选框动态生成文本框

时间:2014-12-09 18:27:59

标签: asp.net-mvc checkboxfor

使用 - ASP.NET MVC 4

用户界面就像 -

Select      Product Code      Product Name

Checkbox    Product 1         Apple
Checkbox    Product 2         Banana
Checkbox    Product 3         Grapes

Submit Button

在提交按钮上单击我需要验证是否选中了复选框。如果没有,则显示消息 - 请选择一个产品。

如果选择,则在控制器中传递所选的产品代码&姓名&没有。复选框检查到另一页

我们如何在MVC 4中实现这一目标?

1 个答案:

答案 0 :(得分:1)

首先,@Html.CheckboxFor(m => m.Checkbox, "Product 1")"Product 1"指定为html属性,并将呈现<input length="9" type="checkbox" .../>(已添加长度属性,其值等于文本中的字符数)。由于重复id属性,它还会创建无效的html。并且[Required]属性是没有意义的(bool是真或假,并且总是需要)。目前,您在复选框和产品之间没有任何关系。

您应该创建一个视图模型来表示您想要显示的内容

public class ProductVM
{
  public bool IsSelected { get; set; }
  public string Code { get; set; }
  public string Name { get; set; }
}

控制器

public ActionResult Edit()
{
  List<ProductVM> model = new List<ProductVM>()
  {
    new ProductVM() { Code = "Product 1", Name = "Apple" },
    new ProductVM() { Code = "Product 2", Name = "Banana" },
    new ProductVM() { Code = "Product 3", Name = "Grapes"}
  };
  return View(model);
}

[HttpPost]
public ActionResult Edit(List<ProductVM> model)
{
  foreach(ProductVM item in model)
  {
    if (item.IsSelected)
    {
      string code = item.Code;
      string name= item.Name;
    }
  }
}

查看

@model List<ProductVM>
@using(Html.BeginForm())
{
  for(int i = 0; i < Model.Count; i++)
  {
    @Html.HiddenFor(m => m[i].Code)
    @Html.HiddenFor(m => m[i].Name)
    @Html.CheckBoxFor(m => m[i].IsSelected)
    @Html.LabelFor((m => m[i].IsSelected, Model[i].Name)
  }
  <input type="submit" />
}

如果您想要客户端验证,您将必须编写自己的验证属性来实现IClientValitable并编写相关的jquery验证方法(但这是单独问题的主题)