2017-01-15 46 views
0

嘿,有人可以幫我提交此表嗎?這是我製作的ViewModel。這是我第三天嘗試拿起MVC,所以我仍然是新手。將表單數據提交給多個表。 NullReferenceException

public class EmployeeAllData 
{ 
    public Employees Employees { get; set; } 
    public PermissionModel PermissionModel { get; set; } 

} 

這是我的表單提交控制器。我從許可表開始,我沒有任何運氣。它不斷給我這個錯誤:NullReferenceException未被用戶代碼處理。我嘗試了硬編碼值,它更新了權限表就好了。我找不到爲什麼我沒有從員工那裏獲得價值。

[HttpPost] 
    public ActionResult Create(EmployeeAllData viewModel) 
    { 

     var permission = new PermissionModel 
     { 
      EmployeesId = Convert.ToByte(viewModel.Employees.Id), 
      TimeStamp = DateTime.Now, 
      PermissionVal = viewModel.Employees.Permissions 
     }; 

     _context.PermissionModels.Add(permission); 
     _context.SaveChanges(); 


     return RedirectToAction("EmployeeList", "Employee"); 
    } 

任何想法?

UPDATE 我想我的問題是我的視圖模型。下面的代碼運行正常,並在數據庫中創建一個新員工。

public ActionResult Create(Employees employees) 
    { 
     _context.Employeeses.Add(employees); 
     _context.SaveChanges(); 
     return RedirectToAction("EmployeeList", "Employee"); 
    } 
+0

因爲'viewModel.Employees'爲空?您需要確保您的表單字段具有與模型聯編程序的屬性層次結構匹配的名稱,以成功映射子屬性 – Shyju

+0

我只是不明白爲什麼它在我不使用viewModel但是當我嘗試使用viewModel將所有的值返回爲null。 – Kyler

+0

首先,你的pluraization是非常混亂的(員工是單一員工,員工是一個集合)。這會讓很多人感到困惑。其次,你的EmployeeAllData視圖模型將你的實體模型嵌套在它的內部,如Shyju所說的那樣搞砸你的模型綁定。您的視圖模型應該具有您的視圖在頂層使用的所有屬性,然後使用像Automapper這樣的工具來簡化來回複製到您的實體模型。你通常不想公開你的實體模型。 –

回答

0

我不需要使用viewModel。這是我的最終代碼現在可以工作。

[HttpPost] 
    public ActionResult Create(Employees employees) 
    { 


     _context.Employeeses.Add(employees); 
     _context.SaveChanges(); 

     var permission = new PermissionModel() 
     { 
      EmployeesId = Convert.ToByte(employees.Id), 
      TimeStamp = DateTime.Now, 
      PermissionVal = employees.Permissions 
     }; 

     _context.PermissionModels.Add(permission); 
     _context.SaveChanges(); 
     return RedirectToAction("EmployeeList", "Employee"); 
    } 
+0

這可能是因爲「employees」是表單字段的名稱:)你必須確保它們匹配 –