获取动态添加的复选框的值

时间:2014-09-18 11:37:43

标签: c# asp.net-mvc-4 razor

我正在尝试检索动态添加的复选框值。这就是我所做的

查看:

foreach (var item in ViewBag.List as List<m_valuation>)
{

    <table>
        <tr>
            <td>Print</td>
            <td>@Html.TextBox("Txt")</td>
            <td>Codes With</td>
            <td>@Html.CheckBox("Check")</td>
            <td>@Html.Label("Codes",item.point_valuation)</td>
        </tr>
    </table>

}

<input type="submit" value="GenerateCodes" />

控制器:

public ActionResult PrintPointCodes(int DealNo)
    {
        List<m_valuation> model = db.m_valuation.ToList();
        ViewBag.List = model;

        return View();
    }

    [HttpPost]
    public ActionResult PrintPointCodes(List<string> Txt,List<bool> Check)
    {
        List<bool> CheckedItems = new List<bool>();
        for (int i = 0; i < Check.Count; i++)
        {
            CheckedItems[i] = Check[i].Equals(false);
        }
        return View();
    }

返回的值带有true和false。不知道我哪里错了 请帮我! 提前致谢

enter image description here

1 个答案:

答案 0 :(得分:0)

@Html.CheckBox(和@Html.CheckBoxFor)方法会渲染2个控件,<input type="checkbox" ..><input type="hidden" value="false">。原因是未选中的复选框不会回发,因此第二个隐藏的输入确保返回false是未选中关联的(真实)复选框。以这种方式处理复选框(作为布尔值数组)将不起作用。如果您要手动渲染html,那么您只能获得true个值,而您将无法确定在客户端上检查了哪些值。

要正确绑定您的媒体资源,请在for循环中渲染您的控件,或使用自定义EditorTemplate进行课程m_valuation

GET方法

public ActionResult PrintPointCodes(int DealNo)
{
  List<m_valuation> model = db.m_valuation.ToList();
  return View(model);
}

查看

@model List<m_valuation>
...
for (int i = 0; i < Model.Count; i++)
{
  @Html.TextBoxFor(m => m[i].Txt)
  @Html.CheckBoxFor(m => m[i].Check)
}

POST方法

[HttpPost]
public ActionResult PrintPointCodes(List<m_valuation> model)
{
  //model will be correctly bound