ASP.NET MVC C# 设置模型属性值

本文关键字:模型 属性 设置 NET MVC ASP | 更新日期: 2023-09-27 18:33:30

我在控制器方法中为summaryVm设置值时遇到了一些问题。我正在接受一个OrderVM并且我已经在调试模式下进行了检查,并且OrderVM的属性在传递时都设置了,并且Order还设置了所有值(包括orderID)。但是,在方法的后期,当我尝试将SummaryVm的值设置为这些值时,summaryVm.Tickets nullsummaryVm.orderID也是如此。然而,emaileventID正在被做好。

如果有人对我做错了什么有建议,那就太好了,因为我不知道有什么问题。

[HttpPost]
public ActionResult Create(OrderVM model)
{
    if (!ModelState.IsValid)
        return View("CreateOrder", model);
    }
    string currentUserId = User.Identity.GetUserId();
    ApplicationUser currentUser = db.Users.FirstOrDefault(x => x.Id == currentUserId);
    Event currentEvent = db.Events.Find(model.EventID);
    Order order = new Order
    {
        OrderDate = DateTime.Now,
        EventID = model.EventID,
        Event = currentEvent,
        user = currentUser
    };
    float total = 0;
    // Initialise a TicketsOrdered data model for each valid ticket
    foreach (TicketVm ticket in model.Tickets.Where(t => t.Quantity > 0))
    {
        total += (ticket.Price*ticket.Quantity);
        TicketsOrdered ticketOrder = new TicketsOrdered
        {
            OrderID = order.OrderID,
            TicketID = ticket.TicketID,
            Quantity = ticket.Quantity
        };
        db.ticketsOrdered.Add(ticketOrder);
    }
    order.OrderTotal = total;
    currentEvent.Order.Add(order);
    currentUser.Order.Add(order);

    SummaryVm summaryVm = new SummaryVm
    { 
        email = order.user.UserName, 
        orderID = order.OrderID,
        tickets = model.Tickets, 
        totalPrice = total, 
        eventID=model.EventID,
        stripePublishableKey=ConfigurationManager.AppSettings["stripePublishableKey"]
    };
    db.Orders.Add(order);
    db.SaveChanges(); 
    return RedirectToAction("OrderSummary", "Order", summaryVm);
}
public class OrderVM
{
    public int ID { get; set; }
    public int EventID { get; set; }
    public string EventName { get; set; }
    // additional properties of Event you want to display
    public DateTime OrderDate { get; set; }
    public string FirstName { get; set; }
    // additional properties of Order and OrderDetails you want to edit
    public IList<TicketVm> Tickets { get; set; }
    public Event events {get; set;}
}
public class SummaryVm
{
    public IList<TicketVm> tickets { get; set; }
    public string email { get; set; }
    public float totalPrice { get; set; }
    public int orderID { get; set; }
    public int eventID { get; set; }
    public string stripePublishableKey { get; set; }
    public string StripeToken { get; set; }
    public string StripeEmail {get;set;}
}

ASP.NET MVC C# 设置模型属性值

在创建 SummaryVm 之前移动保存更改

...
db.Orders.Add(order);
db.SaveChanges(); 
SummaryVm summaryVm = new SummaryVm
{ 
    email = order.user.UserName, 
    orderID = order.OrderID,
    tickets = model.Tickets, 
    totalPrice = total, 
    eventID=model.EventID,
         stripePublishableKey=ConfigurationManager.AppSettings["stripePublishableKey"]
};
return RedirectToAction("OrderSummary", "Order", summaryVm);

它会起作用。