2017-08-31 13 views
1

ビューモデルのメンバであるモデルを埋めようとしています。 アクションからビューにデータを送信します。正しい仕事です。保存ボタンをクリックすると、エラーが発生する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はデフォルトでnullだろう

public class OrderCustomer { 

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

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

よう

に初期化されるときOrderCustomerOrderを初期化していないことを考えると

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

意図したものであると考えている - あなたの認証コードに見えるか、このような匿名のプリンシパルを設定https://stackoverflow.com/を質問/ 2893334/invalidating-asp-net-formsauthentication-server-side – mchan

+0

'order'は' null'です。そのプロパティにインスタンスを割り当てない – Nkosi

答えて

2

これは現在、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; 
関連する問題