Передача сложных объектов

Передача данных способом GET

Передавать значения для характеристик можно разными методами. При отправке GET-запроса значения передаются через строчку запроса. Стандартный get-запрос воспринимает приблизительно последующую форму: название_ресурса?параметр1=значение1&параметр2=значение2. К примеру, определим последующий способ:

publicstringHello(intid) { return$"id= {id}"; }

Чтоб передать значение для параметра id, нам нужно выслать запрос Передача сложных объектов типа http://localhost:57086/Home/Hello/9

Если способ воспринимает несколько характеристик:

publicstringSquare(inta, inth) { doubles = a * h / 2; return$"Площадь треугольника с основанием {a} и высотой {h} равна {s}"; }

В данном случае мы можем обратиться к действию, набрав в адресной строке Home/Square?a=10&h=3, и приложение выдало бы нам подходящий Передача сложных объектов итог.

Если же мы не используем характеристики в строке запроса, то для характеристик будут передаваться значения по дефлоту. К примеру, при отправке запроса Home/Square/ характеристики a и h будут равны 0. Но на случай схожей ситуации мы можем использовать характеристики по дефлоту, которые будут работать, если через Передача сложных объектов строчку запроса не передается никаких характеристик:

publicstringSquare(inta = 3, inth = 10) { doubles = a * h / 2; return$"Площадь треугольника с основанием {a} и высотой {h} равна {s}"; }

Передача сложных объектов

Хотя строчка запроса в большей степени употребляется для передачи данных простых типов, но мы также можем принимать более сложные объекты. К примеру, определим Передача сложных объектов рядом с контроллером класс Geometry:

publicclassHomeController : Controller { publicstringSquare(Geometry geometry) { return$"Площадьтреугольникасоснованием {geometry.Altitude} ивысотой {geometry.Height} равна {geometry.GetSquare()}"; } // остальноесодержимое } publicclassGeometry { publicintAltitude { get; set; } // основание publicintHeight { get; set; } // высота publicdoubleGetSquare() // вычисление площади треугольника { returnAltitude * Height / 2; } }

Класс Geometry определяет два характеристики и способ для подсчета площади. И сейчас в контроллере Передача сложных объектов способ Square воспринимает параметр типа Geometry. Как в данном случае мы можем передать контроллеру данные? Для этого нам нужно выслать запрос наподобие последующего http://localhost:57086/Home/Square?altitude=10&height=3. Тут характеристики строчки запроса должны соответствовать по имени свойствам объекта. Регистр заглавий при всем этом не учитывается:

Передача массивов

Допустим, способ воспринимает Передача сложных объектов массив чисел:

publicstringSum(int[] nums) { return$"Суммачиселравна {nums.Sum()}"; }

Чтоб передать значения для массива, нам нужно использовалась строчку запроса наподобие http://localhost:57086/Home/Sum?nums=1&nums=2&nums=3. В данном случае в массиве nums окажется три элемента.

Сейчас изменим способ Sum, чтоб он воспринимал массив объектов ранее сделанного Передача сложных объектов класса Geometry:

publicstringSum(Geometry[] geoms) { return$"Суммаплощадейравна {geoms.Sum(g=>g.GetSquare())}"; }

Данный способ подсчитывает сумму всех площадей в массиве geoms. И чтоб передать в этот способ данные, нам нужно использовать запрос типа http://localhost:57086/Home/Sum?geoms[0].altitude=10&geoms[0].height=3&geoms[1].altitude=16&geoms[1].height=2. В данном случае в массиве geoms Передача сложных объектов будут два элемента Geometry.

Передачаданных

using System;

namespaceHelperMethods.Models

{

public class User

{

publicintUserId { get; set; }

public string FirstName { get; set; }

public string LastName { get; set; }

publicDateTimeBirthDate { get; set; }

public Address HomeAddress { get; set; }

public bool IsApproved { get; set; }

public Role Role { get; set; }

}

Тип User будет служить классом модели представления Передача сложных объектов во время исследования вспомогательных способов, связанных с формами,

Это стандартный подход с 2-мя способами к работе с HTML-формами, при котором мы полагаемся на привязку моделей ASP.NET MVC Framework в разработке объекта User из данных формы и передаче его способу деяния с атрибутом HttpPost.

Мы никак не обрабатываем данные из формы Передача сложных объектов, так как желаем сосредоточиться на том, как генерировать элементы в представлении. Способ деяния с атрибутом HttpPost просто вызывает способ View() и передает ему объект User, получаемый в качестве параметра, что в итоге приводит к отображению данных формы юзеру.

Это представление содержит стандартную вручную сделанную форму, в какой Передача сложных объектов значения атрибута value частей инсталлируются с внедрением объекта модели.

Направьте внимание, что атрибуты name всех частей установлены в соответствие со качествами модели, которые эти элементы показывают. Атрибут name применяется стандартным связывателем моделей ASP.NET MVC Framework для выяснения того, какие элементы содержат значения для параметров типа модели, при обработке Передача сложных объектов запроса POST. Если опустить атрибут name, форма не будет корректно работать.

Передача коллекции

Определим последующую форму в представлении:

Потому при отправке формы будет формироваться коллекция из names, состоящая из 4 частей. И в способе контроллера мы сможем получить все эти элементы:

[HttpPost] publicstringArray(List names) { stringfin=""; for(inti = 0; i

Передача сложных объектов

У нас есть последующая модель:

publicclassBook { publicintId { get; set; } publicstringName { get; set; } } publicclassAuthor { publicintId { get; set; } publicstringName { get; set; } publicICollection Books { get; set; } }

Модель создателя содержит ссылку на коллекцию книжек. В контроллере мы получаем эту модель:

publicActionResult Index(Author author)

{

returnView(author);

}

Тогда представление Передача сложных объектов могло бы смотреться так:

@model ArrayPostApp.Models.Author Добавлениекниг @using(Html.BeginForm()) { @Html.AntiForgeryToken() Имяавтора Книжка № 1 Заглавие

Добавитьновыйэлемент

} @section Scripts { $(function () { vari = 0; $('.addLink').click(function() { i++; var html2Add= " "+ "Книжка № "+(i+1) + ""+ " Заглавие "+ ""+ " "; $('#booksBlock').append(html2Add); }) }) }

Потому что модель Author содержит набор книжек в свойстве Books, то атрибут Передача сложных объектов name соответственных текстовых частей обязано иметь последующую форму: name="Books[0].name". При помощи кода javascript мы можем динамически добавить новые элементы:


peregruzka-imeni-funkcii.html
peregruzochnie-ustrojstva.html
perehod-groznogo-velichiya-vladiki-1-glava.html