[英]HTML Action Link asp.net mvc
我在通過操作鏈接傳遞id參數時遇到麻煩。 我想在我的視圖中添加一個取消按鈕,該按鈕將使eventID返回該方法,對數據庫執行某些操作,然后重定向到另一個視圖。 我已經進入調試模式,當返回到方法時,id參數為null,我不明白為什么。
這是我創建初始視圖的控制器方法
public ActionResult Create(OrderVM model)
{
//get the currentUser ID to search database for user
string currentUserId = User.Identity.GetUserId();
int quantity = 10;
ApplicationUser currentUser = db.Users.Find(currentUserId);
Order order = new Order
{
OrderDate = DateTime.UtcNow,
EventID = model.EventID,
Event = currentEvent,
user = currentUser
};
//add this order to the database
db.Orders.Add(order);
//save changes to database
db.SaveChanges();
SummaryVm summaryVm = new SummaryVm
{
email = order.user.Email,
orderID = order.OrderID,
tickets = model.Tickets,
totalPrice = total,
ticketQuantity = quantity,
orderDate = order.OrderDate,
eventID = model.EventID,
};
return View("OrderSummary", summaryVm);
}
這是OrderSummary視圖
@model Site.ViewModels.SummaryVm
<head>
<title>Next Page</title>
</head>
<header>
<h2> Here is your order summary, please review before proceeding with payment. Please complete this transaction within 15 minutes or your order will be cancelled. </h2>
</header>
<div class="float-left">
<h2 id="countdown"></h2>
</div>
<div id="content">
<div class="panel panel-default">
<div class="panel-heading">Order Summary</div>
<div class="panel-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 (GeoSocietySite.ViewModels.TicketVm ticket in @Model.tickets)
{
<tr>
<td><span contenteditable>@ticket.Description</span></td>
<td><span contenteditable>@ticket.Price</span></td>
<td><span contenteditable>@ticket.Quantity</span></td>
</tr>
}
</tbody>
</table>
<table id="total-table">
<tr>
<th>Total Price in £: </th>
<td id="custom-amount">@Model.totalPrice</td>
</tr>
</table>
</div>
</div>
</div>
@Html.ActionLink("Cancel", "CancelOrder", "Order", new { id = @Model.eventID })
這是我的CancelOrder控制器方法
public ActionResult CancelOrder(int eventID)
{
//do something to db
return RedirectToAction("CreateOrder", "Order", new { id = eventID });
}
這是我的創建訂單方法
public ActionResult CreateOrder(int? id)
{
Event currentEvent = db.Events.Find(id);
//check event exists
if (currentEvent != null)
{
//get the ID of the user currently logged in to the site
string currentUserId = User.Identity.GetUserId();
//retreive details of current user from db based on ID
ApplicationUser currentUser = db.Users.FirstOrDefault(x => x.Id == currentUserId);
// Initialize a new order
OrderVM model = new OrderVM
{
EventID = currentEvent.EventID,
EventName = currentEvent.Name,
OrderDate = DateTime.Now,
FirstName = currentUser.FirstName,
EventDate = currentEvent.Date,
EventDescription = currentEvent.Description,
EventLocation = currentEvent.Location,
//create view model for each ticket type then place in list
Tickets = currentEvent.Tickets.Select(t => new TicketVm
{
TicketID = t.TicketID,
Description = t.Description,
Price = t.Price
}).ToList(),
};
return View(model);
}else
{
return RedirectToAction("Index", "Events");
}
}
當我嘗試運行此代碼時,我將重定向到“事件索引”頁面,這意味着尚未從數據庫中檢索到該事件,並且通過調試,我可以看到這是因為ID參數為null。 我已經檢查了將summaryVm傳遞給OrderSummary視圖時,它已完全填充了數據。如果有人看到我在做什么錯,將非常感謝您的幫助。 謝謝!
您使用了錯誤的ActionLink
重載(並添加了htmlAttributes
,而不是路由值)。 此外,方法中的參數名為eventID
,而不是id
。 更改為
@Html.ActionLink("Cancel", "CancelOrder", "Order", new { eventID = Model.eventID }, null)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.