【问题标题】:Fill my model of m viewModel in mvc [duplicate]在mvc中填充我的m viewModel模型[重复]
【发布时间】:2017-08-31 18:27:53
【问题描述】:

我尝试填充作为视图模型成员的模型, 我将数据从 Action 发送到 view。它工作正常。但是当点击保存按钮时,得到一个错误,

对象引用未设置为对象的实例。

视图模型是

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;

【问题讨论】:

  • 可能请求未通过身份验证,因此没有设置身份 - 查看您的身份验证代码或设置像这样的匿名主体 stackoverflow.com/questions/2893334/…
  • ordernull。您没有为该属性分配实例

标签: c# asp.net-mvc asp.net-mvc-4 viewmodel


【解决方案1】:

鉴于OrderCustomer在初始化时不会初始化Order

喜欢

public class OrderCustomer {

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

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

那么Order 将默认为null

这意味着当前您创建了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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    相关资源
    最近更新 更多