2014-11-05 60 views
2

{WV_DeviceReg, WV_DevEventLog, WV_DevSystemLog, WV_DeviceConfig}是我的ADO.NET實體框架模型。如何在ASP.NET MVC 4中使用viewmodel(IEnumerable)更新我的數據庫

視圖模型

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; } 
    } 
} 

查看

@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> 
} 

控制器

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(); 
    } 

} 

WV_DeviceConfig { FieldName(PK), DeviceID_F(PK), FieldValue, ServerTime } 

FieldName的映射關鍵字FieldValue的映射值

問:如何使用foreach更新我的數據庫?

+1

我很想試着回答說:「斯蒂芬Muecke k否則回答「 – 2014-11-05 04:08:40

+1

由於'viewModels'的所有屬性在回發時都將爲空,因此我們首先解決該問題。您需要爲每種類型使用'EditorTemplate'或使用'for'循環來呈現您的控件(並將集合從'IEnumerable'更改爲'IList')。 [這個答案](http://stackoverflow.com/questions/26571133/controller-action-methods-model-parameter-is-empty-when-form-submit/26571182#26571182)解釋了這個問題。 (LOL @AbdulAhmad) – 2014-11-05 04:17:50

回答

1

我覺得首先你要你的foreach循環改變傳統的for循環和後背部,像這樣的列表:

@for (int i = 0; i < Model.DeviceConfig.Count(); i ++) { 
     @Html.HiddenFor(m => m.DeviceConfig[i].FieldName) 
//etc.. same thing for all hidden/input fields 

和動作方法能接受像這樣

[HttpPost] 
public ActionResult Setting(List<DeviceConfig> DeviceConfigList) 
列表

,然後你可以做以下更新數據庫

foreach (var item in DeviceConfigList) 
    { 
     db.Entry(item).State = EntityState.Modified; 
    } 
db.SaveChanges(); 
+2

假設OP想回發整個模型,所以方法參數應該是'HomeViewModels模型',然後是'foreach(model.DeviceConfigList中的var item){...' – 2014-11-05 04:38:20

相關問題