1

我必须将复选框表单集合作为布尔值数组插入到 SQL Server 中的位数据类型列中。我用部分运气尝试了下面的事情。

如果所有复选框都被选中,它工作正常。但是如果有些未选中,则只有选中的项目在数组中。那么索引是变化的,无法识别哪个属于哪个记录?

请帮我。

string[] names = Students["name"].Split(char.Parse(","));
            string[] dnos = Students["dno"].Split(char.Parse(","));
            string[] adds = Students["address"].Split(char.Parse(","));
            string[] actives = Students["active"].Split(char.Parse(","));


            for (var i = 0; i < names.Length; i++)
            {
                student stds = new student();
                stds.name = names[i];
                stds.dno = dnos[i];
                stds.address = adds[i];
                if (actives[i] == "on")
                    stds.active = true;
                else
                    stds.active = false;
                db.students.AddObject(stds);

            }
            db.SaveChanges();

HTML:

@model DynamicAddition.DAL.student

@{
ViewBag.Title = "Create";
}

<h3>Create</h3>

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<form id="formstudent" method="post">
    <table id="formTable">
        <thead>
        <tr><th>Name</th><th>D. No</th><th>Address</th><th>Active</th><th>Add New</th></tr>
        </thead>
        <tbody>
        <tr>
            <td><input type="text" name="name" /></td>
            <td><input type="text" name="dno" /></td>
            <td><input type="text" name="address" /></td>
            <td><input type="checkbox" name="active" /></td>
            <td><a href="javascript:addRow();"><b>Add new</b></a></td>
        </tr>
        </tbody>
    </table>
    <p><input type="submit" value="Create" /></p>
    </form>
<div>
@Html.ActionLink("Back to List", "Index")
</div>
<script src="../../Scripts/jquery-1.5.1.js"></script>
<script language="javascript" type="text/javascript">
function addRow() {
    $('#formstudent tbody tr:first').clone().find("input").each(
    function () {
        $(this).val = '';
    }).end().appendTo("#formTable");
}
</script>
4

1 回答 1

1

我在创建动态表单时偶然发现了同样的问题。

按照 html 标准,有一些控件被发回,而另一些则没有。因此,未选中的复选框或禁用的输入不会在表单回发上回发到服务器。

处理这些情况的常规做法是在您的情况下使用默认值进行隐藏输入,因为默认值为 false 进行输入

@Html.Hidden("name1",..)

并将值设置为 false 然后使用与此输入相同的名称进行复选框

@Html.Checkbox("name1", ..)

通过这样做,即使未选中复选框,隐藏输入的值也会被发送回服务器,您将获得一个有效值false

**注意:- Asp.net MVC 在需要回发值时使用相同的技巧。**注意:- 已经有一个答案很好地描述了如何发布/提交禁用的输入复选框?

于 2013-10-30T09:06:35.537 回答