Создание проекта для примера
Мы собираемся начать с создания простого проекта для примера, который мы будем использовать в этой главе. Мы создали новый 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: Запуск приложения из примера

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