Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / DropDownList в ASP MVC / 10 сообщений из 10, страница 1 из 1
15.02.2015, 01:07
    #38879963
fritz321
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DropDownList в ASP MVC
Здравствуйте.
Есть модель данных
Код: c#
1.
2.
3.
4.
5.
public class Book
    {
            public int BookId { get; set; }
            public Category Category { get; set; }
    }


Есть форма редактирования книги, в котором выводится список категорий, чтоб выбрать к какой относится книга.
Контроллер
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public ViewResult EditBook(int bookId)
        {
            Book book = repository.Books.FirstOrDefault(g => g.BookId == bookId);
            var Categories = repository.Categories.Select(c => new System.Web.WebPages.Html.SelectListItem { Value = c.CategoryId.ToString(), Text = c.Name });
            SelectList list = new SelectList(Categories, "Value", "Text");
            ViewBag.Categories = list;
            
            return View(book);
        }


В представлении все отображается
Код: c#
1.
@Html.DropDownList("Categories", null, new { @class = "form-control"})



но при валидации модели в пост запросе - выводится ошибка
авторThere is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'Categories'.

подскажите как принять данные нормально в пост запросе?
...
Рейтинг: 0 / 0
15.02.2015, 01:10
    #38879964
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DropDownList в ASP MVC
fritz321но при валидации модели в пост запросе - выводится ошибка

Это не валидация, это невозможно вывести результат после обработки POST запроса. В методе, обрабатывающем POST, надо заполнить ViewData также как и для GET.
...
Рейтинг: 0 / 0
15.02.2015, 01:15
    #38879965
fritz321
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DropDownList в ASP MVC
hVostt,

всмысле? мне передается id категории, а мне надо заполнить Book.Category ...
...
Рейтинг: 0 / 0
15.02.2015, 06:47
    #38879991
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DropDownList в ASP MVC
fritz321,

всмысле в пост запрос добавь эти строки:
Код: c#
1.
2.
3.
var Categories = repository.Categories.Select(c => new System.Web.WebPages.Html.SelectListItem { Value = c.CategoryId.ToString(), Text = c.Name });
SelectList list = new SelectList(Categories, "Value", "Text");
ViewBag.Categories = list;
...
Рейтинг: 0 / 0
15.02.2015, 10:40
    #38880019
fritz321
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DropDownList в ASP MVC
bald56rusfritz321,

всмысле в пост запрос добавь эти строки:
Код: c#
1.
2.
3.
var Categories = repository.Categories.Select(c => new System.Web.WebPages.Html.SelectListItem { Value = c.CategoryId.ToString(), Text = c.Name });
SelectList list = new SelectList(Categories, "Value", "Text");
ViewBag.Categories = list;



Можно поподробней про пост запрос? а то что то не выходит не как все равно

Теперь не проходит валидацию модели Book - if (ModelState.IsValid)
и это понятно, ибо Book.Category - экземпляр класса Category, а не просто номер
...
Рейтинг: 0 / 0
15.02.2015, 11:02
    #38880023
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DropDownList в ASP MVC
fritz321,
например я делал так: для работы с книгами у меня есть контроллер пусть будет BooksController тогда класс выглядит так
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
public class Book
    {
            public int BookId { get; set; }
            public Category Category { get; set; }
    }
public class BooksController : Controller
{
	private Repository context = new Repository(); 
	public ActionResult Index()
	{
		//Код для вывода списка книг
	}
	
	public ActionResult Edit(int Id)
	{
		Book book = context.Books.FirstOrDefault(g => g.BookId == Id);
		ViewBag.Categories = new SelectList(context.Categories, "Id", "Name", book.CategoryId);
		return View(book)
	}
	
	[HttpPost]
	public ActionResult Edit(Book Book)
	{
		if (ModelState.IsValid)
		{
			//здесь делаем то что надо 
		}
		ViewBag.Categories = new SelectList(context.Categories, "Id", "Name", book.CategoryId);		
	}
}


писал без студии мог ошибиться но общий смысл такой. в первом едите вызываеться представление для редактирования, во втором методе(пост запрос) происходит валидация и выполнение необходимых действий
...
Рейтинг: 0 / 0
17.02.2015, 16:21
    #38881994
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DropDownList в ASP MVC
Не понимаю, почему люди так любят эти ViewBag'и и игнорируют MVVP паттерн?
...
Рейтинг: 0 / 0
17.02.2015, 17:59
    #38882112
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DropDownList в ASP MVC
AxeleronНе понимаю, почему люди так любят эти ViewBag'и и игнорируют MVVP паттерн?

А чем плохи вьюбэги? Если уметь их готовить, то...

Например, можно сделать акшен фильтр типа [PopulateCategories], который будет пихать во вьюбэг коллекцию категорий, независимо от используемой модели. Юзать можно сколько угодна раз совершенно для разных экшенов и разных контроллеров. Почему надо обязательно засрать модель всяким мусором?
...
Рейтинг: 0 / 0
18.02.2015, 14:40
    #38882917
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DropDownList в ASP MVC
hVostt,
типизация все дела. сам ж много раз это говорил. Но опять иногда и удобнее туда конечно закинуть. Был на местной приволжской олимпиаде по асп нет, так там многие студенты пихали во вьюбаг что не попадя и мотивировали эт тем, что так увидели в уроках)
...
Рейтинг: 0 / 0
18.02.2015, 15:29
    #38882994
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DropDownList в ASP MVC
handmadeFromRuhVostt,
типизация все дела. сам ж много раз это говорил. Но опять иногда и удобнее туда конечно закинуть. Был на местной приволжской олимпиаде по асп нет, так там многие студенты пихали во вьюбаг что не попадя и мотивировали эт тем, что так увидели в уроках)

У типизации есть свои преимущества, у отсутствия типизации свои. В C# можно сочетать преимущества обоих подходов.
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / DropDownList в ASP MVC / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]