Чтение онлайн

на главную - закладки

Жанры

Шрифт:

В результате создается разметка, содержащая теги <option>.

<select id="lstName" name="lstName">

<option>John</option>

<option>Paul</option>

<option>George</option>

<option>Rringo</option>

</select>

Для обеспечения возможности выбора нескольких элементов в списках, генерируемых методом ListBox, в качестве параметра следует передать коллекцию MultiSelectList.

<%= Html.ListBox("lstName",

new MultiSelectList( new[] {"John", "Paul", "George", "Rringo"} )) %>

Тогда

будет определено свойство multiple тега <select>.

<select id="lstName" multiple="multiple" name="lstName">

<option>John</option>

<option>Paul</option>

<option>George</option>

<option>Rringo</option>

</select>

Разумеется, в реальных приложениях не всегда удобно создавать отдельно список для элементов форм и хотелось бы использовать коллекцию бизнесобъектов, применяемых в логике приложения. Для этого может быть использован конструктор коллекции SelectList.

SelectList(коллекция объектов,

название поля объекта, содержащее значение,

название поля объекта, содержащее текст,

выбранное значение

)

Например, в нашем приложении используются объекты типа Person, определение которых представлено далее.

public class Person {

public int Id { get; set; }

public string Name { get; set; }

}

Тогда в методе контроллера для сохранения в коллекцию ViewData коллекцию элементов списка можно передать, используя конструктор SelectList так, как показано далее.

public ActionResult About

{

List<Person> lst = new List<Person>

{

new Person { Id = 1, Name = "John"},

new Person { Id = 2, Name = "Paul"},

new Person { Id = 3, Name = "George"},

new Person { Id = 4, Name = "Ringo"}

};

ViewData["lstName"] = new SelectList(lst, "Id", "Name", 2);

return View ;

}

В результате будет создана HTML-разметка, приведенная далее.

<select id="lstName" multiple="multiple" name="lstName">

<option value="1">John</option>

<option selected="selected" value="2">Paul</option>

<option value="3">George</option>

<option value="4">Ringo</option>

</select>

Таким образом, коллекция бизнес-объектов может быть использована для заполнения списков необходимыми данными.

Индикаторы корректности введенных данных

Пользователям свойственно ошибаться при вводе данных, и приложению необходимо уведомлять пользователя о допущенных ошибках и конкретных полях формы, которые заполнены некорректно. Для этого существуют два вспомогательных метода: Html.validationMessage, который выводит сообщение, относящееся

к определенному полю на форме, и Html.validationSummary , который выводит общую информацию по ошибкам, допущенным при заполнении формы.

Работа этих вспомогательных методов основана на коллекции ModelState, которая упоминалась ранее. В этой коллекции на этапе проверки корректности данных сохраняется информация об ошибках, связанных с конкретными полями формы. Пример действия контроллера, выполняющего проверку корректности введенных данных (валидацию), приведен в листинге 5.7.

Листинг 5.7. Пример валидации данных

[AcceptVerbs(HttpVerbs.Post)]

public ActionResult Edit(Product obj, int id)

{

if (obj.UnitsOnOrder < 0)

ModelState.AddModelError("UnitsOnOrder",

"Количество заказанных единиц товара не может

быть отрицательным.");

if (obj.UnitsInStock < 0)

ModelState.AddModelError("UnitsInStock",

"Количество единиц товара на складе должно быть не

отрицательным.");

if (obj.UnitPrice <= 0)

ModelState.AddModelError("UnitPrice",

"Цена должна быть больше нуля.");

if (!ModelState.IsValid)

{

// есть ошибки, еще раз

// показать форму редактирования

return View(obj);

}

else

{

// ошибок нет, сохранить

db.SaveProduct(obj);

return RedirectToAction("Index");

}

}

Процесс валидации прост — выполняется проверка условий и в случае наличия ошибок в коллекцию Modelstate добавляется информация в виде пары "идентификатор элемента — описание допущенной ошибки". Если в коллекцию Modelstate добавлена хотя бы одна такая пара, то значение свойства Modelstate.isValid будет установлено в false. В случае если ошибки допущены, то необходимо снова отобразить то же представление, которое использовалось для радактирования данных, и передать ему те данные, которые были введены пользователем на предыдущем шаге. Пример такого представления, работающего с кодом, описанным в листинге 5.7, показан в листинге 5.8, там же приведено строго типизированное представление, в качестве модели использующее класс Product.

Листинг 5.8. Представление Edit.aspx

<%@ Page Title="" Language="C#"

MasterPageFile="~/Views/Shared/Site.Master"

Inherits="System.Web.Mvc.ViewPage<MvcViewsDemo.Models.Product>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent"

runat="server">

Edit

</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<h2>

Редактирование сведений о товаре

</h2>

<%= Html.ValidationSummary("npи редактировании сведений

о товаре произошли ошибки.") %>

<% using (Html.BeginForm)

{%>

<fieldset>

<legend>Редактирование сведений о товаре</legend>

<label for="ProductID">

Код продукта:

</1аЬе1>

<%= Model.ProductID.ToString %>

<%= Html.Hidden("ProductId", Model.ProductID)%>

Поделиться:
Популярные книги

Жития святых на русском языке, изложенные по руководству Четьих-Миней святого Димитрия Ростовского. Книга девятая. Май

Ростовский Святитель Дмитрий
9. Жития святых на русском языке, изложенные по руководству Четьих-Миней святого Димитрия Ростовского
Религия и эзотерика:
религия
православие
христианство
5.00
рейтинг книги
Жития святых на русском языке, изложенные по руководству Четьих-Миней святого Димитрия Ростовского. Книга девятая. Май

Сатанизм для интеллигенции

Кураев Андрей Вячеславович
Научно-образовательная:
религиоведение
7.00
рейтинг книги
Сатанизм для интеллигенции

Риф яркости

Брин Дэвид
4. Возвышение
Фантастика:
научная фантастика
7.50
рейтинг книги
Риф яркости

Polo или зеленые оковы

Зайцев Алексей
Фантастика:
юмористическая фантастика
космическая фантастика
6.25
рейтинг книги
Polo или зеленые оковы

"Фантастика 2023-130". Компиляция. Книги 1-22

Демченко Антон Витальевич
Фантастика 2023. Компиляция
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Фантастика 2023-130. Компиляция. Книги 1-22

Сан-Феличе. Книга вторая

Дюма-отец Александр
Приключения:
исторические приключения
6.00
рейтинг книги
Сан-Феличе. Книга вторая

"Фантастика 2023-134". Компиляция. Книги 1-22

Демина Карина
Фантастика 2023. Компиляция
Фантастика:
фэнтези
боевая фантастика
5.00
рейтинг книги
Фантастика 2023-134. Компиляция. Книги 1-22

Скрытая Империя

Андерсон Кевин Джей
1. Сага Семи Солнц
Фантастика:
научная фантастика
6.25
рейтинг книги
Скрытая Империя

Стальное зеркало

Оуэн Анна Нэнси
Фантастика:
фэнтези
альтернативная история
5.00
рейтинг книги
Стальное зеркало

Зарождение общества будущего

Лайтман Михаэль Семенович
Научно-образовательная:
прочая научная литература
религиоведение
5.00
рейтинг книги
Зарождение общества будущего

Стеллар. Компиляция. Книги 1-9

Прокофьев Роман Юрьевич
Стеллар
Фантастика:
киберпанк
рпг
постапокалипсис
технофэнтези
5.00
рейтинг книги
Стеллар. Компиляция. Книги 1-9

Переворот.ru

Маркеев Олег Георгиевич
7. Странник
Фантастика:
детективная фантастика
5.00
рейтинг книги
Переворот.ru

Академия

Сай Ярослав
2. Медорфенов
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Академия

Вихри Мраморной арки

Уиллис Конни
9. Сны разума
Фантастика:
научная фантастика
5.00
рейтинг книги
Вихри Мраморной арки