Главная страница   /   6.1. Создание проекта для примера (ASP.NET MVC 4

ASP.NET MVC 4

ASP.NET MVC 4

Адам Фриман

6.1. Создание проекта для примера

Мы собираемся начать с создания простого проекта для примера, который мы будем использовать в этой главе. Мы создали новый Visual Studio проект, используя шаблон ASP.NET MVC 4 Web Application и выбрав опцию Empty для создания MVC проекта без начального содержания. Это такой же проект, с каким мы до сих пор работали, и мы назвали проект для этого примера EssentialTools.

Создание классов модели

Затем добавьте файл для класса Product.cs в папку проекта Models и установите контент в соответствии с листингом 6-1. Это тот же самый класс модели, который использовался в предыдущих главах, и единственное изменение заключается в том, чтобы пространство имен соответствовало проекту EssentialTools.

Листинг 6-1: Класс Product
namespace EssentialTools.Models
{
	public class Product
	{
		public int ProductID { get; set; }
		public string Name { get; set; }
		public string Description { get; set; }
		public decimal Price { get; set; }
		public string Category { set; get; }
	}
}

Мы также хотим добавить класс, который будет рассчитывать общую стоимость объектов Product (коллекция объектов). Добавьте новый файл класса LinqValueCalculator.cs в папку Models и задайте ему содержание в соответствии с листингом 6-2.

Листинг 6-2: Класс LinqValueCalculator
using System.Collections.Generic;
using System.Linq;
namespace EssentialTools.Models
{
	public class LinqValueCalculator
	{
		public decimal ValueProducts(IEnumerable<Product> products)
		{
			return products.Sum(p => p.Price);
		}
	}
}

Класс LinqValueCalculator определяет единственный метод ValueProducts, использующий LINQ метод Sum, чтобы сложить значения свойства Price каждого объекта Product, который передается методу (приятная функция LINQ, которой мы часто пользуемся).

Наш последний класс модели называется ShoppingCart, он представляет собой коллекцию объектов Product и использует LinqValueCalculator для определения их общей стоимости. Создайте новый файл класса ShoppingCart.cs и убедитесь, что его содержимое соответствуют листингу 6-3.

Листинг 6-3: Класс ShoppingCart
using System.Collections.Generic;
namespace EssentialTools.Models
{
	public class ShoppingCart
	{
		private LinqValueCalculator calc;
		public ShoppingCart(LinqValueCalculator calcParam)
		{
			calc = calcParam;
		}
		public IEnumerable<Product> Products { get; set; }
		public decimal CalculateProductTotal()
		{
			return calc.ValueProducts(Products);
		}
	}
}

Добавление контроллера

Добавьте новый контроллер HomeController в папку Controllers и установите его контент в соответствии с листингом 6-4. Метод действия Index создает массив объектов Product и использует класс LinqValueCalculator для получения общей стоимости, которая передается методу View. Мы не указываем представление, когда вызываем метод View, поэтому будет использоваться представление по умолчанию.

Листинг 6-4: Контроллер HomeController
using EssentialTools.Models;
using System.Web.Mvc;
using System.Linq;
namespace EssentialTools.Controllers
{
	public class HomeController : Controller
	{
		private Product[] products = {
			new Product {Name = "Kayak", Category = "Watersports", Price = 275M},
			new Product {Name = "Lifejacket", Category = "Watersports", Price = 48.95M},
			new Product {Name = "Soccer ball", Category = "Soccer", Price = 19.50M},
			new Product {Name = "Corner flag", Category = "Soccer", Price = 34.95M}
		};
		public ActionResult Index()
		{
			LinqValueCalculator calc = new LinqValueCalculator();
			ShoppingCart cart = new ShoppingCart(calc) { Products = products };
			decimal totalValue = cart.CalculateProductTotal();
			return View(totalValue);
		}
	}
}

Добавление представления

Последним дополнением к проекту является представление. Щелкните правой кнопкой мыши по методу действия Index в контроллере Home, а затем выберите Add View. Создайте представление Index, которое является строго типизированным с объектом модели представления decimal. Как только вы создадите файл, поменяйте его содержимое, чтобы оно соответствовало листингу 6-5.

Листинг 6-5: Файл Index.cshtml
@model decimal
@{
	Layout = null;
}
<!DOCTYPE html>
<html>
<head>
	<meta name="viewport" content="width=device-width" />
	<title>Value</title>
</head>
<body>
	<div>
		Total value is $@Model
	</div>
</body>
</html>

Это очень простое представление, которое использует выражение @Model для отображения значения decimal, которое передается методом действия. Если вы запустите проект, вы увидите общую стоимость, подсчитанную классом LinqValueCalculator, что показано на рисунке 6-1.

Рисунок 6-1: Запуск приложения из примера

Это очень простой проект, но это закладывает базу для изучения различных инструментов и методов, которые мы описываем в этой главе.