Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
NotAKindPerson
0 / 0 / 0
Регистрация: 15.08.2015
Сообщений: 4
1

Передача значения из View (DropDownListFor) в модель

18.08.2015, 11:38. Просмотров 670. Ответов 4
Метки нет (Все метки)

Есть 2 модели
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    public class Country
    {
        public Guid Id { get; set; }
        public string Name { get; set; }
    }
 
    public class Author
    {
        public Guid Id { get; set; }
        public string FirstName { get; set; }
        public string SecondName { get; set; }
        public string Surname { get; set; }
        public DateTime? BornDate { get; set; }
        //public DateTime? DieDate { get; set; }
        public Country Country { get; set; }
    }
Разметка razor
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        @model IEnumerable<Domain.Enteties.Author>
        ...
        @using (Html.BeginForm())
        {
            <p>@Html.LabelFor(m => m.FirstName)</p>
            <p>@Html.TextBoxFor(m => m.FirstName)</p>
 
            <p>@Html.LabelFor(m => m.SecondName)</p>
            <p>@Html.TextBoxFor(m => m.SecondName)</p>
 
            <p>@Html.LabelFor(m => m.Surname)</p>
            <p>@Html.TextBoxFor(m => m.Surname)</p>
 
            <p>@Html.LabelFor(m => m.BornDate)</p>
            <p>@Html.TextBoxFor(m => m.BornDate)</p>
 
            <p>@Html.DropDownListFor(m => m.Country, new SelectList(ViewBag.Countries, "Id", "Name"))</p>
 
            <p><input type="submit" value="Send" /></p>
        }
И, наконец, контроллер
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        private LibraryContext db = new LibraryContext();
 
        [HttpGet]
        public ViewResult Add()
        {
            ViewBag.Countries = db.Countries.ToList();
            return View("Card");
        }
 
        [HttpPost]
        public ActionResult Add(Author model)
        {
            ViewBag.Title = "Add";
            model.Id = Guid.NewGuid();
            db.Authors.Add(model);
            db.SaveChanges();
            return RedirectToAction("List");
        }
 
        public ActionResult List()
        {
            return View(db.Authors.ToList());
        }
При отправке формы на сервер в модели не поле Country == null.
Вопрос: как заставить заполнятся поле country в зависимости от выбранного элемента?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.08.2015, 11:38
Ответы с готовыми решениями:

Как в строго-типизированном View сделать DropDownListFor из другой модели?
Есть форма ввода данных в таблицу. Как сделать чтобы в строго-типизированном View сделать...

Выбор элемента в 1 DropDownListFor должен изменить список во 2 DropDownListFor
Добрый день! Плиз, подскажите. У меня есть два списка, как сделать так, чтобы выбор элемента в...

DropDownListFor не возвращает значения
Люююди помогите,а ? Сутки сижу и не могу решить проблему с этим адским элементом, интернет не...

Вывести Null значения из БД в DropDownListFor
Здравствуйте такой вопрос, мне нужно вывести в DropdownListFor, которые хранятся в базе, но...

DropDownListFor и ListBox - получить значения выделенных элементов
Получение список, для заполнения DDL и ListBox в контроллере public ActionResult...

4
Metall_Version
2122 / 1259 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
Завершенные тесты: 2
18.08.2015, 13:38 2
NotAKindPerson, помойму просто получить два поля страны Id и Name (используя плюшки MVC) не удастся, проще использовать javascript.

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
<script type="text/javascript">
function fillCountry(){
  var selectOpt = $("#select-country option:selected");
  $("#country-id").val(selectOpt.val());
  $("#country-name").val(selectOpt.text());
}
</script>
 
 
@using (Html.BeginForm("Add", "Home", FormMethod.Post, new{onsubmit="fillCountry"})
        {
            <p>@Html.LabelFor(m => m.FirstName)</p>
            <p>@Html.TextBoxFor(m => m.FirstName)</p>
 
            <p>@Html.LabelFor(m => m.SecondName)</p>
            <p>@Html.TextBoxFor(m => m.SecondName)</p>
 
            <p>@Html.LabelFor(m => m.Surname)</p>
            <p>@Html.TextBoxFor(m => m.Surname)</p>
 
            <p>@Html.LabelFor(m => m.BornDate)</p>
            <p>@Html.TextBoxFor(m => m.BornDate)</p>
 
            @Html.HiddenFor(x => x.Country.Id, new{id ="country-id"})
            @Html.HiddenFor(x => x.Country.Name, new{id ="country-name"})
 
            <p>@Html.DropDownListFor(m => m.Country, new SelectList(ViewBag.Countries, "Id", "Name"), new{id="select-country"})</p>
 
            <p><input type="submit" value="Send" /></p>
        }
То есть перед отправкой формы, мы ид и имя страны записываем в хиден поля
в BeginForm укажите свой контроллер вместо Home, убедитесь что подключен jQuery
1
NotAKindPerson
0 / 0 / 0
Регистрация: 15.08.2015
Сообщений: 4
18.08.2015, 22:19  [ТС] 3
Возникла идея изменения типа поля доменной модели (Author)
с
C#
1
 public Country Country { get; set; }
на
C#
1
 public Guid Country { get; set; }
но тогда возникнет необходимость создавать определенное количество обслуживающего кода.
Имеют ли место быть другие, более элегантные способы?

Добавлено через 3 часа 28 минут
Проблема была решена (частично) следующим путем:
C#
1
2
3
4
5
6
7
8
9
10
11
12
<p>@Html.DropDownListFor(m => m.Country.Id, new SelectList(ViewBag.Countries, "Id", "Name"))</p>
 
[HttpPost]
public ActionResult Add(Author model)
{
    ViewBag.Title = "Add";
    model.Id = Guid.NewGuid();
    model.Country = db.Countries.Find(model.Country.Id);
    db.Authors.Add(model);
    db.SaveChanges();
    return RedirectToAction("List");
}
в вышеописанном с добавлением в модель все в нормально, но использование\неиспользование такого подхода в конструкции
C#
1
2
3
4
5
6
7
8
[HttpPost]
public ActionResult Edit(Author model)
{
    model.Country = db.Countries.Find(model.Country.Id);
    db.Entry(model).State = EntityState.Modified;
    db.SaveChanges();
    return RedirectToAction("List");
}
не приводит не к каким изменениям в модели.
Вопрос: почему и как с этим бороться?)
0
Metall_Version
2122 / 1259 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
Завершенные тесты: 2
19.08.2015, 00:07 4
Цитата Сообщение от NotAKindPerson Посмотреть сообщение
не приводит не к каким изменениям в модели.
а какие изменения должны быть в модели?
тут должна сущность в базу сохранится, если не сохраняется - продебажить, посмотреть что происходит, убедится что вы проверяете в нужной базе данных
1
NotAKindPerson
0 / 0 / 0
Регистрация: 15.08.2015
Сообщений: 4
18.02.2016, 11:56  [ТС] 5
На самом деле все просто, следовало добавить в модель еще одно свойство CountryId, и в POST методе запросить из репозитория сущность по ключу.
0
18.02.2016, 11:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2016, 11:56

Вывод значения адреса почты в DropDownListFor, введённого в предыдущей форме
В моём приложении на странице ввода информации о читателе я ввожу данные о человеке (имя, адрес...

Передать модель из одного view в другой
Суть задачи вот в чем: пишу мини-блог, загвоздка получилась в отображении самого текста - хочу...

Передача значения из View в Controller
Добрый день. Была модель Post содержащая свойства Title и Content. public class Post {...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru