The {WV_DeviceReg, WV_DevEventLog, WV_DevSystemLog, WV_DeviceConfig} are my models from ADO.NET Entity Framework.
ViewModel
namespace MvcWebVms.Models
{
public class HomeViewModels
{
public IEnumerable<WV_DeviceReg> DeviceReg { get; set; }
public IEnumerable<WV_DevEventLog> DevEventLog { get; set; }
public IEnumerable<WV_DevSystemLog> DevSystemLog { get; set; }
public IEnumerable<WV_DeviceConfig> DeviceConfig { get; set; }
}
}
View
@model MvcWebVms.Models.HomeViewModels
@using (Html.BeginForm()){
<div>
@foreach (var item in Model.DeviceConfig) {
@Html.HiddenFor(modelItem => item.FieldName)
@Html.HiddenFor(modelItem => item.DeviceID_F)
<div class="editor-label">
@Html.DisplayFor(modelItem => item.FieldName)
</div>
<div class="editor-field">
@Html.EditorFor(modelItem => item.FieldValue)
</div>
}
<input type="submit" value="Apply" />
</div>
}
Controller
public ActionResult Setting(string id)
{
HomeServices service = new HomeServices();
return View(service.GetDeviceSettingAT(id));
}
public WVDBEntities wvdb = new WVDBEntities();
[HttpPost]
public ActionResult Setting(HomeViewModels viewModels)
{
if (ModelState.IsValid)
{
foreach (????????????)
{
????????????????
}
wvdb.SaveChanges();
return View(viewModels);
}
else
{
return View();
}
}
Table
WV_DeviceConfig { FieldName(PK), DeviceID_F(PK), FieldValue, ServerTime }
Key of FieldName Mapping value of FieldValue
Q: How to use foreach to update my database, please?
viewModelswill be empty when you post back, lets address that issue first. You need to use anEditorTemplatefor each type or use aforloop to render your controls (and change the collections fromIEnumerabletoIList). This answer explains the issue. (LOL @AbdulAhmad)