C# 列表中的数据未显示在foreach循环asp.net mvc中#
我有一个包含列表的视图模型,当我将视图模型传递给并尝试使用foreach循环显示列表内容时,屏幕上不会显示任何内容。我已经调试过了,当列表在传递到视图之前肯定被数据填充时,我不知道为什么它不会显示。如果有人对我做错了什么有任何建议,我会非常感激。谢谢 我的控制器方法C# 列表中的数据未显示在foreach循环asp.net mvc中#,c#,html,asp.net,asp.net-mvc,C#,Html,Asp.net,Asp.net Mvc,我有一个包含列表的视图模型,当我将视图模型传递给并尝试使用foreach循环显示列表内容时,屏幕上不会显示任何内容。我已经调试过了,当列表在传递到视图之前肯定被数据填充时,我不知道为什么它不会显示。如果有人对我做错了什么有任何建议,我会非常感激。谢谢 我的控制器方法 [HttpPost] public ActionResult Create(OrderVM model) { //get the currentUser ID to search datab
[HttpPost]
public ActionResult Create(OrderVM model)
{
//get the currentUser ID to search database for user
string currentUserId = User.Identity.GetUserId();
//instantiate new ApplicationUser and assign the current user to this var
ApplicationUser currentUser = db.Users.FirstOrDefault(x => x.Id == currentUserId);
//instantiate new Event and assign the event being booked to this var
Event currentEvent = db.Events.Find(model.EventID);
// Initialize an Order data model, save it and gets its ID
Order order = new Order
{
OrderDate = DateTime.Now,
EventID = model.EventID,
Event = currentEvent,
user = currentUser
};
db.Orders.Add(order);
db.SaveChanges();
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);
db.SaveChanges();
//instantiate new SummaryVm to display order to user and complete transaction
SummaryVm summaryVm = new SummaryVm
{
email = order.user.UserName,
orderID = order.OrderID,
tickets = model.Tickets,
totalPrice = total,
eventID = model.EventID,
};
return RedirectToAction("OrderSummary", "Order", summaryVm);
}
我的视图模型
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 class TicketVm
{
public int TicketID { get; set; }
public string Description { get; set; }
public float Price { get; set; }
public int Quantity { get; set; }
}
公共类摘要VM
{
公共IList票证{get;set;}
公共字符串电子邮件{get;set;}
公共浮动总价{get;set;}
公共int-orderID{get;set;}
public int eventID{get;set;}
}
公共类票证
{
public int TicketID{get;set;}
公共字符串说明{get;set;}
公开浮动价格{get;set;}
公共整数数量{get;set;}
}
我的订单摘要视图
@model Site.ViewModels.SummaryVm
<head>
<title>Summary</title>
</head>
<body>
<table class="table">
<thead>
<tr>
<th>Ticket Type</th>
<th><span contenteditable>Price</span></th>
<th><span contenteditable>Quantity</span></th>
</tr>
</thead>
<tbody>
@foreach (Site.ViewModels.TicketVm ticket in Model.tickets)
{
<tr>
row
<td><span contenteditable>@ticket.Description</span></td>
<td><span contenteditable>@ticket.Price</span></td>
<td><span contenteditable>@ticket.Quantity</span></td>
</tr>
}
</tbody>
</table>
</body>
@model Site.ViewModels.SummaryVm
总结
票型
价格
量
@foreach(Model.tickets中的Site.ViewModels.TicketVm票证)
{
一行
@车票,描述
@票价
@票,数量
}
为什么要调用RedirectToAction?它永远不会携带任何数据。RedirectToAction的最后一个参数仅携带路由字典值。请参见为什么要调用RedirectToAction?它永远不会携带任何数据。RedirectToAction的最后一个参数仅携带路由字典值。请参见正如Saleem所说,您不想使用RedirectToAction。这将导致另一个HTTP调用,并使您更难通过HTTP发送数据
您有两个选择:
1) 如果要将该数据传递到该方法(在同一控制器内)并进行进一步的工作,可以使用一个参数(如果在其他地方调用该参数,则可能会使用默认参数),只需使用return OrderSummary(summaryVm)代码>
2) 这是你最想做的事情。如果两者都使用相同的视图,则可以使用返回视图(“OrderSummary”、“Order”、summaryVm”)显式说明要返回的视图代码>。这允许您从查找与方法名称同名(或可能是控制器)的视图更改。正如Saleem所说,您不想使用RedirectToAction。这将导致另一个HTTP调用,并使您更难通过HTTP发送数据
您有两个选择:
1) 如果要将该数据传递到该方法(在同一控制器内)并进行进一步的工作,可以使用一个参数(如果在其他地方调用该参数,则可能会使用默认参数),只需使用return OrderSummary(summaryVm)代码>
2) 这是你最想做的事情。如果两者都使用相同的视图,则可以使用返回视图(“OrderSummary”、“Order”、summaryVm”)显式说明要返回的视图代码>。这允许您从查找与方法名称同名(或可能是控制器)的视图更改。我认为在将数据发布到服务器时,您应该遵循此处的模式。您只是不能在调用RedirectToAction时发送数据。您必须重定向到OrderSummary控制器操作,并从数据库中取回数据,或将所需数据推送到会话或TempData中,以便在下一个视图中可用。我认为在将数据发布到服务器时,您应该遵循此处的模式。您只是不能在调用RedirectToAction时发送数据。您必须重定向到OrderSummary控制器操作,并从数据库取回数据,或将所需数据推送到会话或TempData中,以便在下一个视图中可用。我是否应该调用返回视图(summaryVm)?是和否。这取决于您尝试执行的操作。如果您决定调用视图,则必须传递视图名称,因为按照惯例,它将调用名为的视图以执行操作。因此,查看(,)例如,在您的案例中,返回视图(“OrderSummary”,summaryVm)谢谢@Saleem我使用了返回视图,它工作得很好。我应该调用返回视图(summaryVm)吗?是和否。这取决于您试图做什么。如果您决定调用视图,则必须传递视图名称,因为按照惯例,它将调用名为的视图以执行操作。因此,视图(,)例如,在您的案例中,返回视图(“OrderSummary”,summaryVm)感谢@Saleem我使用了返回视图,它工作得非常好。