簡體   English   中英

HTML動作鏈接asp.net mvc

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM