Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core
В приложении из предыдущей главы метод Buy использовал параметр purchase. Так как данный метод обрабатывает POST-запросы, то мы можем отправить ему следующую форму:
<form method="post" action=""> <input type="hidden" value="@ViewBag.BookId" name="BookId" /> <p>Введите свое имя </p> <input type="text" name="Person" /> <p>Введите адрес :</p> <input type="text" name="Address" /> <input type="submit" value="Отправить" /> </form>
Значение атрибута name у всех полей на этой форме соответствует названию свойства модели, поэтому система автоматически свяжет значения полей с соответствующими свойствами. А в методе Buy весь этот набор свойств превратится в модель Purchase.
Кроме POST-запросов у нас есть также GET-запросы, при которых все параметры передаются в строке запроса. Например, вторая версия метода Buy в качестве
параметра принимает значение типа int: public ActionResult Buy(int id)
. Стандартный get-запрос принимает примерно следующую форму:
название_ресурса?параметр1=значение1&параметр2=значение2. То есть запрос к данному методу мог бы выглядеть так:
Home/Buy?id=2. Название параметров метода должно совпадать с названием параметров в строке запроса. Благодаря этому система сможет их
автоматически связать. Ну а в самом методе мы сможем получить этот параметр и использовать его по своему усмотрению.
Кроме того, система маршрутизации позволяет создавать маршруты. Например, по умолчанию в проекте MVC определяется следующий маршрут: Контроллер/Метод/id. Последний параметр является опциональным. И благодаря этому мы можем передать параметр id и так: Home/Buy/2
Для примера определим действие, которое будет подсчитывать площадь треугольника:
public string Square(int a, int h) { double s = a*h/2.0; return "<h2>Площадь треугольника с основанием " + a + " и высотой " + h + " равна " + s + "</h2>"; }
В этом случае мы можем обратиться к действию, набрав в адресной строке Home/Square?a=10&h=3, и приложение выдало бы нам нужный результат.
Мы также можем задать для параметров значения по умолчанию:
public string Square(int a=10, int h=3) { double s = a*h/2.0; return "<h2>Площадь треугольника с основанием " + a + " и высотой " + h + " равна " + s + "</h2>"; }
В этом случае при запросе страницы мы можем указать только один параметр или вообще не указывать(Home/Square?h=5).
Кроме того, мы можем получить параметры, да и не только параметры, но и другие данные, связанные с запросом, из объектов контекста запроса. Нам доступны следующие объекты контекста: Request, Response, RoutedData, HttpContext и Server.
Объект Request содержит коллекцию Params, которая хранит все параметры, переданные в запросы. И мы их можем получить:
public string Square() { int a = Int32.Parse(Request.Params["a"]); int h = Int32.Parse(Request.Params["h"]); double s = a*h/2.0; return "<h2>Площадь треугольника с основанием " + a + " и высотой " + h + " равна " + s + "</h2>"; }