Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/56: Рейтинг темы: голосов - 56, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 16.10.2011
Сообщений: 85

Передать данные из View в Controller

17.02.2016, 22:26. Показов 10887. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Например есть некоторое View.

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
31
32
33
@{
    ViewBag.Title = "Index";
}
 
<h2>Index</h2>
 
<script src="~/Scripts/jquery-2.2.0.min.js"></script>
<script src="~/Scripts/moment.min.js"></script>
<script src="~/Scripts/bootstrap.min.js"></script>
<script src="~/Scripts/bootstrap-datetimepicker.min.js"></script>
 
<link href="~/Content/bootstrap.min.css" rel="stylesheet" />
<link href="~/Content/bootstrap-datetimepicker.min.css" rel="stylesheet" />
 
<div class="container">
    <div class="row">
        <div class='col-sm-6'>
            <div class="form-group">
                <div class='input-group date' id='datetimepicker1'>
                    <input type='text' class="form-control" />
                    <span class="input-group-addon">
                        <span class="glyphicon glyphicon-calendar"></span>
                    </span>
                </div>
            </div>
        </div>
        <script type="text/javascript">
            $(function () {
                $('#datetimepicker1').datetimepicker();
            });
        </script>
    </div>
</div>
Хотелось бы передать в контроллер дату которую выбрал пользователь в контроллер.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class HomeController : Controller
    {
        //
        // GET: /Home/
 
        public ActionResult Index()
        {
            return View();
        }
 
        public ActionResult GetData(DateTime dateTime)
        {
            return View();
        }
 
    }
Но как это лучше сделать. И что использовать? Json? Jquery?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.02.2016, 22:26
Ответы с готовыми решениями:

Я теряю данные на пути Controller-View-Controller. Как правильно получить модель из представления?
У меня есть модель, которая содержит несколько свойств. Есть List&lt;Point&gt; и ThranslatingCam. Свойство ThranslatingCam содержит свойства,...

Данные из View в Controller
Всем привет. Пытаюсь разобраться с MVC и не могу решить проблемму. Из View в Controller возвращается null. Уже все перепробовал. Метод...

Данные из View не передаются в Controller
Знаю, что уже есть полно подобных тем, но нигде увы не нашел ответа. Почему-то данные из вьюхи не передаются в контроллер. На View...

21
7 / 7 / 1
Регистрация: 12.02.2016
Сообщений: 45
18.02.2016, 09:05
Я делаю так:
C#
1
2
3
4
5
@Html.BeginForm("GetData")
    {
        <input type="datetime" name="dateTime" />
        <input type="submit" value="Отправить дату"/>
    }
GetData - название метода в контроллере.
<input type="datetime" name="dateTime" /> - name - название переменной которую ждет метод контроллера
<input type="submit" value="Отправить дату"/> - кнопка отправки формы, пока не нажмем, ничего не отправится.

Еще можно создать модель для вьюшки и пользоваться @Html.EditorFor и другими плюшками.
0
 Аватар для Nooz
31 / 31 / 15
Регистрация: 22.10.2015
Сообщений: 100
18.02.2016, 09:10
Так просто обычную Form и кнопку submit.. Или нужен асинхронный запрос в момент выбора даты?
0
0 / 0 / 0
Регистрация: 15.08.2015
Сообщений: 4
18.02.2016, 12:11
Если использование формы не предполагается , то создайте контрол (например кнопку), и в jquery вешайте на его обработчик в котором будете брать данные из DateTimePicker'a. Инициируйте Get или POST запрос на сервер с передачей параметра.

HTML5
1
<button id="subBtn">DO IT</button>
....
JavaScript
1
2
3
4
5
$('#subBtn').click(function() {
    var picker =  $('#datetimepicker1').datetimepicker();
    var dt = picker.getDate(); // по поводу getDate не уверен, но смысл понятен
    $.get('@Url.Action("GetData")', { dateTime: dt }); // 
});
0
2 / 2 / 0
Регистрация: 16.10.2011
Сообщений: 85
18.02.2016, 14:28  [ТС]
Вообщим полностью рабочий вариант

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
31
32
33
34
35
36
37
38
39
40
@{
    ViewBag.Title = "Index";
}
 
<h2>Index</h2>
 
<script src="~/Scripts/jquery-2.2.0.min.js"></script>
<script src="~/Scripts/moment.min.js"></script>
<script src="~/Scripts/bootstrap.min.js"></script>
<script src="~/Scripts/bootstrap-datetimepicker.min.js"></script>
 
<link href="~/Content/bootstrap.min.css" rel="stylesheet" />
<link href="~/Content/bootstrap-datetimepicker.min.css" rel="stylesheet" />
 
<div class="container">
    <div class="row">
        <div class='col-sm-6'>
            <div class="form-group">
                <div class='input-group date' id='datetimepicker1'>
                    <input type='text' class="form-control" />
                    <span class="input-group-addon">
                        <span class="glyphicon glyphicon-calendar"></span>
                    </span>
                </div>
            </div>
        </div>
        <script type="text/javascript">
            $('#datetimepicker1').datetimepicker({ useCurrent: false });
            $('#datetimepicker1').on("dp.hide", function (e) {
                $.ajax({
                    url: "/Home/GetData",
                    type: "POST",
                    data: { test: $('#datetimepicker1').data('DateTimePicker').date().format('YYYY-MM-DD') },
                    success: function (result) { alert('Done') },
                    error: function (r, e, s) { alert(e) }
                });
            });
        </script>
    </div>
</div>
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
 
namespace DatePicker.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Home/
 
        public ActionResult Index()
        {
            return View();
        }
        [HttpPost]
        public ActionResult GetData(DateTime test)
        {
            return View();
        }
    }
}
Вот только осталась одна мелочь почему после того как дата выбирается, и ajax корректно отправляет дату далее появляется ошибка в консоле. "POST http://localhost:8798/Home/GetData 500 (Internal Server Error)" Подскажите почему такое может быть?
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
18.02.2016, 15:23
Цитата Сообщение от SinnerMan Посмотреть сообщение
ajax корректно отправляет дату далее появляется ошибка в консоле. "POST http://localhost:8798/Home/GetData 500 (Internal Server Error)"
Cкорее всего метод контроллера вызывается, но, ятп, DefaultModelBinder не может разобрать передаваемую дату, поэтому, если бы test параметр был типа Nullable<DateTime> , то передался бы null в метод. Но поскольку переменная test не может принимать null значение - отсюда исключение и Internal Server Error.
Попробуйте изменить параметр на DateTime?.
+ Во вкладке Network браузера можно найти подробное описание ошибки на стороне сервера.

Добавлено через 4 минуты
Решения два: либо писать свой ModelBinder для корректного разбора даты, либо на клиенте определить формат даты, совпадающий с форматом текущей локали сервера, чтобы DefaultModelBinder смог без проблем его разобрать. Вроде так.

Добавлено через 14 минут
Ну так, какое описание ошибки в ответе сервера?
0
2 / 2 / 0
Регистрация: 16.10.2011
Сообщений: 85
18.02.2016, 15:27  [ТС]
Самое интересное если контролер выглядит как
C#
1
public ActionResult GetData(DateTime test)
ajax передает дату и оно распознается контролером. Правда выпадает ошибка.

Если же изменить на
C#
1
public ActionResult GetData(string test)
ошибки тоже есть и дата опять распознается контроллером.
Миниатюры
Передать данные из View в Controller   Передать данные из View в Controller  
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
18.02.2016, 15:51
Так вы нажмите на запрос, отмеченный красным цветом - можно будет просмотреть ответ сервера.
Я неверно выразился, что решения два.
Суть в том, что форматы дат на клиенте и сервере разные из за разных региональных настроек, поэтому binder не может распознать передаваемую дату.
1. Либо на клиенте поменять локаль на локаль сервера.
2. Либо на сервере поменять локаль на локаль клиента.
3. Либо на сервере ничего не менять, но написать свой modelBinder, для корректного приема даты. Но это уже костыль.

Добавлено через 16 минут
Попробуйте так:
Отсюда: GitHub
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<div class="container">
    <div class="row">
        <div class='col-sm-6'>
            <div class="form-group">
                <div class='input-group date' id='datetimepicker2'>
                    <input type='text' class="form-control" />
                    <span class="input-group-addon">
                        <span class="glyphicon glyphicon-calendar"></span>
                    </span>
                </div>
            </div>
        </div>
        <script type="text/javascript">
            $(function () {
                $('#datetimepicker2').datetimepicker({
                    locale: 'ru' // <----- This one
                });
            });
        </script>
    </div>
</div>
И веб-конфиг:
XML
1
2
3
4
5
<configuration>
    <system.web>
        <globalization uiCulture="ru-RU" culture="ru-RU" />
    </system.web>
</configuration>
Возможно, пикер на клиенте отвалится при установке русской локали, нужно будет решать и этот вопрос.
0
2 / 2 / 0
Регистрация: 16.10.2011
Сообщений: 85
18.02.2016, 15:52  [ТС]
А каким образом поменять локаль клиента на локаль сервера?
Миниатюры
Передать данные из View в Controller  
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
18.02.2016, 15:54
Цитата Сообщение от SinnerMan Посмотреть сообщение
А каким образом поменять локаль клиента на локаль сервера?
$('#datetimepicker2').datetimepicker({locale: 'ru'});

Смотрите выше пост. Вы так и не показали ответ сервера - там будет подробное описание ошибки.
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
18.02.2016, 17:10
Вот такая вот ошибка. При этом у меня метод действия так и не вызывается, то есть еще на этапе binding-а падает все.
Миниатюры
Передать данные из View в Controller  
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
18.02.2016, 17:16
Вот такой метод у меня:
C#
1
2
3
4
5
[HttpPost]
        public JsonResult GetData(DateTime? dateTime)
        {
           return Json(new { Success = true });
        }
Как и говорил, отладка показывает null для dateTime: (после того как изменил на DateTime?)
Миниатюры
Передать данные из View в Controller  
0
2 / 2 / 0
Регистрация: 16.10.2011
Сообщений: 85
18.02.2016, 17:29  [ТС]
очень странно...
Миниатюры
Передать данные из View в Controller  
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
18.02.2016, 17:35
Цитата Сообщение от SinnerMan Посмотреть сообщение
очень странно...
А, ну я вытаскивал, не так: $('#datetimepicker1').data('DateTimePicker').date().format('YYYY-MM-DD')

а так: $('#datetimepicker1').val();
Теперь тоже работает. Но ошибок то нет без изменения каких-либо настроек. В чем тогда проблема?
0
2 / 2 / 0
Регистрация: 16.10.2011
Сообщений: 85
18.02.2016, 17:40  [ТС]
Та вот светит что-то не понятно что.
Миниатюры
Передать данные из View в Controller  
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
18.02.2016, 17:44
Так написано же: cannot read property Format of null.
Ваш скрипт:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
Ваш скрипт:
<script type="text/javascript">
            $('#datetimepicker1').datetimepicker({ useCurrent: false });
            $('#datetimepicker1').on("dp.hide", function (e) {
                $.ajax({
                    url: "/Home/GetData",
                    type: "POST",
                    data: { test: $('#datetimepicker1').data('DateTimePicker').date().format('YYYY-MM-DD') },
                    success: function (result) { alert('Done') },
                    error: function (r, e, s) { alert(e) }
                });
            });
        </script>
Мой:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<script type="text/javascript">
    $(document).ready(function() {
        $('#datetimepicker1').datetimepicker();
        $("#sendRef").click(function() {
            $.ajax({
                type: 'POST',
                data: {
                    dateTime: $('#datetimepicker1').data('DateTimePicker').date().format('YYYY-MM-DD')
                },
                    url: "/Home/GetData"
                }).done(function(result) {
                    console.log("Successfully: " + result.Success);
                })
                .fail(function(r, e, s) {
                    debugger;
                });
        });
    });
</script>
У меня все хорошо отрабатывает.
0
2 / 2 / 0
Регистрация: 16.10.2011
Сообщений: 85
18.02.2016, 17:54  [ТС]
Может это IIS так работает криво?
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
18.02.2016, 17:57
Не, он тут вообще не при чем. У вас ошибка еще в скрипте возникает, до IIS-а дело даже не доходит.
Дебажьте, проверяйте наличие объекта $('#datetimepicker1').data('DateTimePick er').date() перед отправкой в событии on.hide.
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
18.02.2016, 18:01
У меня он не равен null, у вас почему то null.
Миниатюры
Передать данные из View в Controller  
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
18.02.2016, 18:03
Упс, точнее вот:
Миниатюры
Передать данные из View в Controller  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.02.2016, 18:03
Помогаю со студенческими работами здесь

Получить данные из View в Controller
В формочке пользователь вводит число, это число необходимо занести в единственную переменную int test в Get запросе. Как это можно...

Как из одного View Controller передать переменную в другой
Как в swift 1.2 передать переменную из одного View Controller в другой, пробовал через segue но ничего не получается, переменная все равно...

Вызвать метод View Controller'a из другого View Controller'a
Какой есть простой способ вызвать метод одного контроллера из другого ? Метод - остановка обновления координат, если что. -...

Смена Root View Controller в Navigation Controller
Доброго времени суток. В приложении есть Storyboard. В нем navigation controller выставлен как initial view controller. При первом...

По нажатию кнопки на View Controllere открыть Table View Controller
Как по нажатию кнопки на View Controllere открыть Table View Controller


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru