Click here to Skip to main content
15,892,643 members
Articles / Web Development / HTML

MVC Techniques with jQuery, JSON, Knockout, and C#

Rate me:
Please Sign up or sign in to vote.
4.94/5 (138 votes)
2 Jan 2012CPOL14 min read 440.4K   22.4K   415  
Developing an Order Entry application with MVC.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using NorthwindApplicationServices;
using NorthwindViewModel;

namespace NorthwindWebApplication.Controllers
{
    public class OrdersController : Controller
    {
       
        /// <summary>
        /// Begin Order Entry
        /// </summary>
        /// <returns></returns>
        public ActionResult OrderEntryCustomerList()
        {        
            return View("OrderEntryCustomerList");
        }

        /// <summary>
        /// Begin Order Inquiry
        /// </summary>
        /// <returns></returns>
        public ActionResult BeginOrderInquiry()
        {
            return View("OrderInquiry");
        }


        /// <summary>
        /// Start Order Entry
        /// </summary>
        /// <param name="customerID"></param>
        /// <returns></returns>
        public ActionResult StartOrderEntry(string customerID)
        {
            OrderApplicationService orderApplicationService = new OrderApplicationService();
            OrderViewModel orderViewModel  = orderApplicationService.BeginOrderEntry(customerID);
            return View("OrderEntryHeader", orderViewModel);
        }

        /// <summary>
        /// Create Order
        /// </summary>
        /// <param name="postedFormData"></param>
        /// <returns></returns>
        public ActionResult CreateOrder(FormCollection postedFormData)
        {

            OrderViewModel orderViewModel = new OrderViewModel();

            orderViewModel.Order.CustomerID = Convert.ToString(postedFormData["CustomerID"]);
            orderViewModel.Order.ShipName = Convert.ToString(postedFormData["ShipName"]);
            orderViewModel.Order.ShipAddress = Convert.ToString(postedFormData["ShipAddress"]);
            orderViewModel.Order.ShipCity = Convert.ToString(postedFormData["ShipCity"]);
            orderViewModel.Order.ShipCountry = Convert.ToString(postedFormData["ShipCountry"]);
            orderViewModel.Order.ShipRegion = Convert.ToString(postedFormData["ShipRegion"]);

            if (NorthwindBusinessServices.Utilities.IsNumeric(postedFormData["Shipper"]) == true)
                orderViewModel.Order.ShipVia = Convert.ToInt32(postedFormData["Shipper"]);
            
            orderViewModel.Order.ShipPostalCode = Convert.ToString(postedFormData["ShipPostalCode"]);

            if (NorthwindBusinessServices.Utilities.IsDate(postedFormData["RequiredDate"])==true)
                orderViewModel.Order.RequiredDate = Convert.ToDateTime(postedFormData["RequiredDate"]);

            OrderApplicationService orderApplicationService = new OrderApplicationService();
            orderViewModel = orderApplicationService.CreateOrder(orderViewModel);
          
            return Json(new
            {
                ReturnStatus = orderViewModel.ReturnStatus,
                ViewModel = orderViewModel,
                ValidationErrors = orderViewModel.ValidationErrors,
                MessageBoxView = Helpers.MvcHelpers.RenderPartialView(this, "_MessageBox", orderViewModel),               
            });
        
        }


        /// <summary>
        /// Create Order
        /// </summary>
        /// <param name="postedFormData"></param>
        /// <returns></returns>
        public ActionResult UpdateOrder(FormCollection postedFormData)
        {

            OrderViewModel orderViewModel = new OrderViewModel();

            orderViewModel.Order.OrderID = Convert.ToInt32(postedFormData["OrderID"]);
            orderViewModel.Order.CustomerID = Convert.ToString(postedFormData["CustomerID"]);
            orderViewModel.Order.ShipName = Convert.ToString(postedFormData["ShipName"]);
            orderViewModel.Order.ShipAddress = Convert.ToString(postedFormData["ShipAddress"]);
            orderViewModel.Order.ShipCity = Convert.ToString(postedFormData["ShipCity"]);
            orderViewModel.Order.ShipCountry = Convert.ToString(postedFormData["ShipCountry"]);
            orderViewModel.Order.ShipRegion = Convert.ToString(postedFormData["ShipRegion"]);
         
            if (NorthwindBusinessServices.Utilities.IsNumeric(postedFormData["Shipper"]) == true)
                orderViewModel.Order.ShipVia = Convert.ToInt32(postedFormData["Shipper"]);

            orderViewModel.Order.ShipPostalCode = Convert.ToString(postedFormData["ShipPostalCode"]);

            if (NorthwindBusinessServices.Utilities.IsDate(postedFormData["RequiredDate"]) == true)
                orderViewModel.Order.RequiredDate = Convert.ToDateTime(postedFormData["RequiredDate"]);

            OrderApplicationService orderApplicationService = new OrderApplicationService();
            orderViewModel = orderApplicationService.UpdateOrder(orderViewModel);

            return Json(new
            {
                ReturnStatus = orderViewModel.ReturnStatus,
                ViewModel = orderViewModel,
                ValidationErrors = orderViewModel.ValidationErrors,
                MessageBoxView = Helpers.MvcHelpers.RenderPartialView(this, "_MessageBox", orderViewModel),
            });

        }

        /// <summary>
        /// Order Entry Detail
        /// </summary>
        /// <param name="orderID"></param>
        /// <returns></returns>
        public ActionResult OrderEntryDetail(int orderID)
        {
            OrderApplicationService orderApplicationService = new OrderApplicationService();
            OrderViewModel orderViewModel = orderApplicationService.GetOrderDetails(orderID);

            return View("OrderEntryDetail", orderViewModel);
        }

        /// <summary>
        /// Order Edit
        /// </summary>
        /// <param name="postedFormData"></param>
        /// <returns></returns>
        public ActionResult OrderEdit(int orderID)
        {
            OrderApplicationService orderApplicationService = new OrderApplicationService();
            OrderViewModel orderViewModel = orderApplicationService.BeginOrderEdit(orderID);
            return View("OrderEntryHeader", orderViewModel);
        }

        /// <summary>
        /// Add Order Detail Line Item
        /// </summary>
        /// <param name="postedFormData"></param>
        /// <returns></returns>
        public ActionResult AddOrderDetailLineItem(FormCollection postedFormData)
        {
            OrderApplicationService orderApplicationService = new OrderApplicationService();
            OrderViewModel orderViewModel = new OrderViewModel();

            orderViewModel.OrderDetail.OrderID = Convert.ToInt32(postedFormData["OrderID"]);
            orderViewModel.OrderDetail.ProductID = Convert.ToInt32(postedFormData["ProductID"]);

            if (NorthwindBusinessServices.Utilities.IsNumeric((postedFormData["Quantity"])) == true)
                orderViewModel.OrderDetail.Quantity = Convert.ToInt32(postedFormData["Quantity"]);

            if (NorthwindBusinessServices.Utilities.IsDouble((postedFormData["Discount"])) == true)
                orderViewModel.OrderDetail.Discount = Convert.ToDouble(postedFormData["Discount"]);

            orderViewModel = orderApplicationService.AddOrderDetailLineItem(orderViewModel);

            return Json(new
            {
                ReturnStatus = orderViewModel.ReturnStatus,
                ViewModel = orderViewModel,
                ValidationErrors = orderViewModel.ValidationErrors,
                MessageBoxView = Helpers.MvcHelpers.RenderPartialView(this, "_MessageBox", orderViewModel),
            });


        }

        /// <summary>
        /// Update Order Detail Line Item
        /// </summary>
        /// <param name="postedFormData"></param>
        /// <returns></returns>
        public ActionResult UpdateOrderDetailLineItem(FormCollection postedFormData)
        {
            string rowIndex = Convert.ToString( postedFormData["RowIndex"]);

            OrderApplicationService orderApplicationService = new OrderApplicationService();
            OrderViewModel orderViewModel = new OrderViewModel();

            orderViewModel.OrderDetail.OrderID = Convert.ToInt32(postedFormData["OrderID"]);
            orderViewModel.OrderDetail.ProductID = Convert.ToInt32(postedFormData["ProductID"]);

            if (NorthwindBusinessServices.Utilities.IsNumeric((postedFormData["Quantity"])) == true)
                orderViewModel.OrderDetail.Quantity = Convert.ToInt32(postedFormData["Quantity"]);

            if (NorthwindBusinessServices.Utilities.IsDouble((postedFormData["Discount"])) == true)
                orderViewModel.OrderDetail.Discount = Convert.ToDouble(postedFormData["Discount"]);          

            orderViewModel = orderApplicationService.UpdateOrderDetailLineItem(orderViewModel);

            return Json(new
            {
                ReturnStatus = orderViewModel.ReturnStatus,
                ViewModel = orderViewModel,
                RowIndex = rowIndex,
                ValidationErrors = orderViewModel.ValidationErrors,
                MessageBoxView = Helpers.MvcHelpers.RenderPartialView(this, "_MessageBox", orderViewModel),
            });

        }

        /// <summary>
        /// Update Order Detail Line Item
        /// </summary>
        /// <param name="postedFormData"></param>
        /// <returns></returns>
        public ActionResult DeleteOrderDetailLineItem(FormCollection postedFormData)
        {
            string rowIndex = Convert.ToString(postedFormData["RowIndex"]);
            string productName = Convert.ToString(postedFormData["ProductName"]);
            int orderID = Convert.ToInt32(postedFormData["OrderID"]);
            int productID = Convert.ToInt32(postedFormData["ProductID"]);
       
            OrderApplicationService orderApplicationService = new OrderApplicationService();

            OrderViewModel orderViewModel = new OrderViewModel();
            orderViewModel.OrderLineItem.OrderDetails.OrderID = orderID;
            orderViewModel.OrderLineItem.OrderDetails.ProductID = productID;
            orderViewModel.OrderLineItem.Products.ProductName = productName;

            orderViewModel = orderApplicationService.DeleteOrderDetailLineItem(orderViewModel);

            return Json(new
            {
                ReturnStatus = orderViewModel.ReturnStatus,
                ViewModel = orderViewModel,
                RowIndex = rowIndex,
                ValidationErrors = orderViewModel.ValidationErrors,
                MessageBoxView = Helpers.MvcHelpers.RenderPartialView(this, "_MessageBox", orderViewModel),
            });

        }


        /// <summary>
        /// Customer Inquiry
        /// </summary>
        /// <param name="postedFormData"></param>
        /// <returns></returns>
        public ActionResult CustomerInquiry(FormCollection postedFormData)
        {
          
            CustomerApplicationService customerApplicationService = new CustomerApplicationService();
            CustomerViewModel customerViewModel = new CustomerViewModel();

            customerViewModel.PageSize = Convert.ToInt32(postedFormData["PageSize"]);
            customerViewModel.SortExpression = Convert.ToString(postedFormData["SortExpression"]);
            customerViewModel.SortDirection = Convert.ToString(postedFormData["SortDirection"]);
            customerViewModel.CurrentPageNumber = Convert.ToInt32(postedFormData["CurrentPageNumber"]);
            customerViewModel.Customer.CustomerID = Convert.ToString(postedFormData["CustomerID"]); 
            customerViewModel.Customer.CompanyName = Convert.ToString(postedFormData["CompanyName"]);
            customerViewModel.Customer.ContactName = Convert.ToString(postedFormData["ContactName"]); 

            customerViewModel = customerApplicationService.CustomerInquiry(customerViewModel);
            
            return Json(new
            {
                ReturnStatus = customerViewModel.ReturnStatus,
                ViewModel = customerViewModel,
                MessageBoxView = Helpers.MvcHelpers.RenderPartialView(this, "_MessageBox", customerViewModel),
                CustomerInquiryView = Helpers.MvcHelpers.RenderPartialView(this, "CustomerInquiryGrid", customerViewModel)
            });

        }

        /// <summary>
        /// Order Inquiry
        /// </summary>
        /// <param name="postedFormData"></param>
        /// <returns></returns>
        public ActionResult OrderInquiry(FormCollection postedFormData)
        {

            OrderApplicationService orderApplicationService = new OrderApplicationService();
            OrderViewModel orderViewModel = new OrderViewModel();

            orderViewModel.PageSize = Convert.ToInt32(postedFormData["PageSize"]);
            orderViewModel.SortExpression = Convert.ToString(postedFormData["SortExpression"]);
            orderViewModel.SortDirection = Convert.ToString(postedFormData["SortDirection"]);
            orderViewModel.CurrentPageNumber = Convert.ToInt32(postedFormData["CurrentPageNumber"]);
            orderViewModel.Customer.CustomerID = Convert.ToString(postedFormData["CustomerID"]);
            orderViewModel.Customer.CompanyName = Convert.ToString(postedFormData["CompanyName"]);

            if (NorthwindBusinessServices.Utilities.IsNumeric((postedFormData["OrderID"]))==true)
                orderViewModel.Order.OrderID = Convert.ToInt32(postedFormData["OrderID"]);

            orderViewModel = orderApplicationService.OrderInquiry(orderViewModel);

            return Json(new
            {
                ReturnStatus = orderViewModel.ReturnStatus,
                ViewModel = orderViewModel,
                MessageBoxView = Helpers.MvcHelpers.RenderPartialView(this, "_MessageBox", orderViewModel),
                OrderInquiryView = Helpers.MvcHelpers.RenderPartialView(this, "OrderInquiryGrid", orderViewModel)
            });

        }


    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer Joey Software Solutions
United States United States
Mark Caplin has specialized in Information Technology solutions for the past 30 years. Specializing in full life-cycle development projects for both enterprise-wide systems and Internet/Intranet based solutions.

For the past fifteen years, Mark has specialized in the Microsoft .NET framework using C# as his tool of choice. For the past four years Mark has been implementing Single Page Applications using the Angular platform.

When not coding, Mark enjoys playing tennis, listening to U2 music, watching Miami Dolphins football and watching movies in Blu-Ray technology.

In between all this, his wife of over 25 years, feeds him well with some great home cooked meals.

You can contact Mark at mark.caplin@gmail.com

...

Comments and Discussions