Riquelmy Melara
Riquelmy Melara

Reputation: 941

MVC 4 Error 404 on Created View

I have this controller:

[Authorize]
public class CheckoutController : Controller
{

    ShoppingCartContext storeDB = new ShoppingCartContext();
    const string PromoCode = "FREE";

    [HttpPost]
    public ActionResult AddressAndPayment(FormCollection values)
    {
        var order = new Order();
        TryUpdateModel(order);

        try
        {
            if (string.Equals(values["PromoCode"], PromoCode,
                StringComparison.OrdinalIgnoreCase) == false)
            {
                return View(order);
            }
            else
            {
                order.Username = User.Identity.Name;
                order.OrderDate = DateTime.Now;

                //Save Order
                storeDB.Orders.Add(order);
                storeDB.SaveChanges();
                //Process the order
                var cart = Models.ShoppingCart.GetCart(this.HttpContext);
                cart.CreateOrder(order);

                return RedirectToAction("Complete",
                    new { id = order.OrderId });
            }
        }
        catch
        {
            //Invalid - redisplay with errors
            return View(order);
        }
    }

    public ActionResult Complete(int id)
    {
        // Validate customer owns this order
        bool isValid = storeDB.Orders.Any(
            o => o.OrderId == id &&
            o.Username == User.Identity.Name);

        if (isValid)
        {
            return View(id);
        }
        else
        {
            return View("Error");
        }
    }

}

And I have created a View called AddressAndPayment under Checkout, so it goes to localhost/Checkout/AddressAndPayment but I only get a 404 error, even if I right click on the View and click on view in Page Inspector. I don't know why its not even showing the view when it is created.

Upvotes: 1

Views: 3685

Answers (1)

Mathew Thompson
Mathew Thompson

Reputation: 56429

You need a corresponding HttpGet method, as your current one only accepts a HttpPost request. Add the following:

[HttpGet]
public ActionResult AddressAndPayment()
{
    return View();
}

Upvotes: 4

Related Questions