[英]How to insert multiple RadioButtonFor value into database
I want to insert 3 value of radio button into Database using MVC. 我想使用MVC将3个单选按钮的值插入数据库。 User need to select one material for each categories(Walls,Roof,Floor)
用户需要为每个类别(墙壁,屋顶,地板)选择一种材料
Currently the user can only select one value (may need to do grouping).But when I do grouping only the structInfo value is inserted into database. 当前用户只能选择一个值(可能需要分组)。但是当我分组时,仅将structInfo值插入数据库。 I need all the 3 value inserted into database.
我需要将所有3个值插入数据库。
This is how the database design look like 这就是数据库设计的样子
the struct inf(walls,roof,floor) the materialinfo is (bricks.concrete,woods, etc) 材质信息的结构inf(墙壁,屋顶,地板)(砖,混凝土,木材等)
So can I make all the 3 value choosed by user save into database? 那么我可以将用户选择的所有3个值都保存到数据库中吗?
This is my view 这是我的看法
@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) @:
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) @:
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 })
}
}
}
}
my GET method 我的GET方法
[HttpGet]
public ActionResult RegisterForm()
{
PopulateStructMaterialData();
using (var dataBase = new TMXEntities())
{
var model = new RegisterInfoPA()
{
//OTHER CODES
};
return View(model);
}
}
Populating Data 填充数据
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;
}
In View 视野中
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)
}
My POST method 我的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();
}
}
}
I am always getting this error 我总是收到这个错误
System.NullReferenceException: Object reference not set to an instance of an object. System.NullReferenceException:对象引用未设置为对象的实例。
How the proper code should look like? 正确的代码应如何显示? Thank you.
谢谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.