2017-08-31 52 views
1

我嘗試填充作爲視圖模型成員的模型, 我從Action發送數據進行查看。它的工作正確。但是當點擊保存按鈕時,出現如下錯誤:在mvc中填充我的m viewModel的模型

未將對象引用設置爲對象的實例。

視圖模型是

public class OrderCustomer 
{ 
    public Order Order { get; set; } 
    public ApplicationUser ApplicationUser { get; set; } 
} 

併爲後期的數據動作

 [HttpPost] 
    public ActionResult AddressAndPayment(OrderCustomer values) 
    { 
     var orderCustomer = new OrderCustomer(); 
     var order = orderCustomer.Order; 

     string uId = User.Identity.GetUserId(); 
     order.Username = User.Identity.Name; 
     order.ApplicationUserId = uId; 
     order.OrderDate = DateTime.Now; 
     order.Address = values.ApplicationUser.Address; 
     order.CityId = (int)values.ApplicationUser.CityId; 
     order.CountryId = (int)values.ApplicationUser.CountryId; 
     order.Email = values.ApplicationUser.Email; 
     order.FirstName = values.ApplicationUser.FName; 
     order.LastName = values.ApplicationUser.LName; 
     order.Phone = values.ApplicationUser.Phone; 
     order.PostalCode = values.ApplicationUser.PostalCode; 
     order.ProvinceId = (int)values.ApplicationUser.ProvinceId; 

     if (ModelState.IsValid) 
     { 

      TryUpdateModel(order); 

      try 
      { 
       _db.Orders.Add(order); 
       _db.SaveChanges(); 
       var cart = ShoppingCart.GetCart(this.HttpContext); 
       cart.CreateOrder(order); 

       return RedirectToAction("Index", "Payment", new { id = order.Id }); 

      } 
      catch 
      { 
       return View(order); 
      } 
     } 
     return View(order); 


    } 

當調試器在這個代碼來顯示在上面的代碼中的錯誤行5,在下面展示,如何我可以修復它嗎?

 order.Username = User.Identity.Name; 
+0

也許請求不被認證,所以沒有屬性集合 - 看看你的授權碼或設置一個匿名委託人這樣https://stackoverflow.com/ question/2893334/invalidating-asp-net-formsauthentication-server-side – mchan

+0

'order'爲'null'。您不會將實例分配給該屬性 – Nkosi

回答

2

鑑於OrderCustomer不初始化Order初始化時

public class OrderCustomer { 

    public OrderCustomer() { 
     Order = new Order(); 
    } 

    public Order Order { get; set; } 
    public ApplicationUser ApplicationUser { get; set; } 
} 

然後Ordernull默認。

這意味着您目前創建了一個OrderCustomer的實例,但從未將值分配給Order屬性。

var orderCustomer = new OrderCustomer(); 
var order = orderCustomer.Order; //<-- Order is null by default 

因此ordernull因爲你不分配一個對象變量。

所以要麼重構上面的例子,要麼確保創建一個新的實例。

var orderCustomer = new OrderCustomer() { 
    Order = new Order() 
}; 

var order = orderCustomer.Order; 
//...code removed for brevity 

但是現在這個問題引發了一個問題,爲什麼您沒有從發佈視圖模型的一部分分配該值?

我相信這是你打算什麼

var order = values.Order;