如何将多个RadioButtonFor值插入数据库

时间:2016-05-12 07:46:56

标签: asp.net asp.net-mvc radiobuttonlist radio-group radiobuttonfor

我想使用MVC将3个单选按钮值插入数据库。 用户需要为每个类别(墙壁,屋顶,地板)选择一种材料

enter image description here

目前用户只能选择一个值(可能需要进行分组)。但是当我进行分组时,只将structInfo值插入到数据库中。我需要将所有3个值插入到数据库中。

这就是数据库设计的样子 enter image description here

struct inf(墙,屋顶,地板)materialinfo是(bricks.concrete,woods等)

那么我可以将用户选择的所有3个值保存到数据库中吗?

这是我的观点

 @foreach (var structIN in Model.structInfo)
                {
                    if (structIN.structId.Equals(1))
                    {
                        @Html.Label(structIN.structNm) @:   

                        foreach (var material in Model.materialInfo)
                        {
                            if (material.materialId.Equals(1) || material.materialId.Equals(2) || material.materialId.Equals(3))
                            {
                                @Html.RadioButtonFor(model => model.buildInfo.materialId, material.materialId)@Html.Label(material.materialNm)
                                @Html.HiddenFor(model => model.buildInfo.structId, new { Value = structIN.structId })

                            }

                        }
                    }

                    else if(structIN.structId.Equals(2))
                    {
                        <br />
                        @Html.Label(structIN.structNm) @:&nbsp; &nbsp;

                        foreach (var material2 in Model.materialInfo)
                        {
                            if (material2.materialId.Equals(2) || material2.materialId.Equals(4) || material2.materialId.Equals(5))
                            {
                                @Html.RadioButtonFor(model2 => model2.buildInfo.materialId, material2.materialId)@Html.Label(material2.materialNm)
                                @Html.HiddenFor(model2 => model2.buildInfo.structId, new { Value = structIN.structId })

                            }

                        }
                    }
                    else if (structIN.structId.Equals(3))
                    {
                        <br />
                        @Html.Label(structIN.structNm) @:&nbsp; &nbsp;

                        foreach (var material3 in Model.materialInfo)
                        {
                            if (material3.materialId.Equals(6) || material3.materialId.Equals(3))
                            {
                                @Html.RadioButtonFor(model3 => model3.buildInfo.materialId, material3.materialId)  @Html.Label(material3.materialNm)
                                @Html.HiddenFor(model3 => model3.buildInfo.structId, new { Value = structIN.structId })

                             }
                        }
                }
                }

1 个答案:

答案 0 :(得分:1)

我的GET方法

 [HttpGet]
    public ActionResult RegisterForm()
    {
        PopulateStructMaterialData();
        using (var dataBase = new TMXEntities())
        {
            var model = new RegisterInfoPA()
            {
                //OTHER CODES
            };

            return View(model);
        }
    }

填充数据

        private void PopulateStructMaterialData()
    {
        var list = new List<strucMaterial>
        {
            new strucMaterial{ifOthers = "", materialId = 1, materialNm = "Bricks", structId = 1, structNm = "Walls", insuranceReqId = 0, isSelected = false},
            new strucMaterial{ifOthers = "", materialId = 2, materialNm = "Concrete", structId = 1, structNm = "Walls", insuranceReqId = 0, isSelected = false},
            new strucMaterial{ifOthers = "", materialId = 3, materialNm = "Woods", structId = 1, structNm = "Walls", insuranceReqId = 0, isSelected = false},

            new strucMaterial{ifOthers = "", materialId = 2, materialNm = "Concrete", structId = 2, structNm = "Roof", insuranceReqId = 0, isSelected = false},
            new strucMaterial{ifOthers = "", materialId = 4, materialNm = "Tiles", structId = 2, structNm = "Roof", insuranceReqId = 0, isSelected = false},
            new strucMaterial{ifOthers = "", materialId = 5, materialNm = "Zinc", structId = 2, structNm = "Roof", insuranceReqId = 0, isSelected = false},

            new strucMaterial{ifOthers = "", materialId = 3, materialNm = "Woods", structId = 3, structNm = "Floor", insuranceReqId = 0, isSelected = false},
            new strucMaterial{ifOthers = "", materialId = 6, materialNm = "Reinforced Concrete", structId = 3, structNm = "Floor", insuranceReqId = 0, isSelected = false},

        };
       ViewBag.populatebuilding = list;
    }

在视图中

  List<Insurance.ViewModels.strucMaterial> viewModelSM = ViewBag.populatebuilding;
  for(int i=0; i<viewModelSM.Count; i++)
  {
                    @Html.DisplayFor(m => viewModelSM[i].structNm)
                    @Html.HiddenFor(m => viewModelSM[i].structId)

                    @Html.CheckBoxFor(m => viewModelSM[i].isSelected)

                    @Html.HiddenFor(m => viewModelSM[i].materialId)
                    @Html.Label(viewModelSM[i].materialNm)
  }

我的POST方法

 [HttpPost]
    public ActionResult RegisterForm(RegisterInfoPA viewmodel, List<strucMaterial> list)
    {
        using (var dataBase = new TMXEntities())
        {
            var model = new RegisterInfoPA()
            {
              //OTHER CODES
            };

            if (ModelState.IsValid)
            {
                //OTHER CODES
                var register = viewmodel.reg;
                var personalinfo = viewmodel.pinfo;

                //Save Register
                db.registers.Add(register);
                db.SaveChanges();
                //Retriving required Id's
                var getid = register.registrationId;
                var getRegTypeID = register.regisTypeId;

                //SAVE PERSONAL INFO
                personalinfo.registrationId = getid;
                db.personalInfoes.Add(personalinfo);
                db.SaveChanges();

              //---HOW SHOULD I SAVE THE CHECKBOX HERE?-----------                                  
              **> tHIS IS MY CODE, BUT IT IS NOT WORKING**
                foreach(var item in list) (<< error starts here)
                {
                    buildingInfo.materialId = item.materialId;
                    buildingInfo.structId = item.structId;
                    buildingInfo.insuranceReqId = item.insuranceReqId;
                    db.buildingInfoes.Add(buildingInfo);
                }
                db.SaveChanges();
            }
       }
    }

我总是收到此错误

System.NullReferenceException:未将对象引用设置为对象的实例。

正确的代码应该如何?谢谢。