Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/30: Рейтинг темы: голосов - 30, средняя оценка - 4.57
49 / 49 / 12
Регистрация: 24.10.2012
Сообщений: 434
1

Очистка элементов формы после пост запроса

02.10.2013, 18:08. Показов 6000. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет!

Ребят подскажите пж, когда я делаю пост запрос и в контролере опять возвращаюсь на прежнюю страницу, то все мои контролы заполнены прежними данными. Как убрать данные? Но на другую страницу редиректиться мне не нужно, так как нужно сообщение пользователю показать:


HTML5
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
41
42
43
44
45
   @{
        if(ViewBag.Rezult == "ok")   
        {<sc ript type="text/javascript">alert('Спасибо! ')</script>}
        
        else if (ViewBag.Rezult == "bad")
        { <sc ript type="text/javascript">alert('Вы не прошли')</script> }
    
     }
        
 
@using (Html.BeginForm())
{
 
    <fieldset>
        <legend>Заполните поля</legend>
 
<table>
<tbody>
<tr>
<td>*Как к вам обращаться:</td>
<td>@Html.TextBox("Name")</td>
</tr>
 
 
</tbody>
</table>
         <br />
 
           
 
        <p>
            
            <table width="290pixels" border="0" cellspacing="13" cellpadding="0" align="left">
            <tbody>
            <tr>
            <td>&nbsp;</td>
            <td  st yle="text-align: right;"><input type="submit" name="operation" value="Отправить" /></td></tr></tbody></table>
 
        </p>
    </fieldset>
    
    
   
}
             </div>
контролер
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public ActionResult News()
      {          
          return View();
      }
 
 
      [HttpPost]
      public ActionResult News(string Name)
      {
          if (*****)
          {               
              ViewBag.Rezult = "ok";
          }
 
          else
              ViewBag.Rezult = "bad";
         
          return View(); // RedirectToAction("Index", "Home");
      }
звездочки - немного логики скрыл.

если стоит - return View(); то возвращается форма с заполненными ранее контролами, как у топикстартера, если сделать как советовали - RedirectToAction("Index", "Home"); то все ок, но я человека не уведомляю о том успешно или не успешно все прошло....
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.10.2013, 18:08
Ответы с готовыми решениями:

Сервер закрывает соединение после пост запроса
я только начал учить паскаль, пишу в седьмой делфи, столкнулся с проблемой. пытаюсь...

Обработка ответа после пост-запроса (Ajax)
Разбираюсь с ajax-функциями jQuery и возник вот такой вопрос, ответ на который никак найти не могу:...

Записать данные из пост-запроса в БД sql после нажатия кнопки
Всем привет. Вопрос связан с передачей данных с одной формы методом пост в переменные и последующая...

Очистка формы после отправки
Всем привет. Есть сайт на нем есть несколько форм для отправки заказа. Если, например нажать на...

14
50 / 50 / 7
Регистрация: 06.05.2013
Сообщений: 79
Записей в блоге: 1
02.10.2013, 21:56 2
Можно так:
@Html.TextBox("Name",string.Empty)

Совет на будущие, если Вы используете этот код в рамках работы, то я бы посоветовал уйти от ViewBug и переделать это на типизированную модель и пользоваться asp.net mvc binding ( вот почитайте )

Добавлено через 6 минут
Если смотреть на задачу более реально ( как бы я её сделал ) , то Вам бы <input onclick="myJsFunction" /> хватило бы. Само собой в функции, надо написать:
Javascript
1
 if($('#name').val() == "******")) {alert('yes');} else { alert('no'); }
И не надо сервер трогать.
1
49 / 49 / 12
Регистрация: 24.10.2012
Сообщений: 434
03.10.2013, 11:54  [ТС] 3
Цитата Сообщение от VladA4 Посмотреть сообщение
Совет на будущие
спасибо, понимаю.


myJsFunction
---
я так понимаю так можно валидировать корректность заполнения форм и простеньких капч...?

Добавлено через 10 минут
хотя валидацию наверно лучше аяксом делать...

Добавлено через 17 минут
чет не работает

HTML5
1
2
<td>*Название нашего города:</td>
<td>@Html.TextBox("Capcha", string.Empty)</td>
Javascript
1
2
3
4
5
6
<script type="text/javascript">
    function JsFunctionCapchaCheck() {
        if ($('#Capcha').val() == "Москва") { alert('Спасибо! Заявка отправлена. В течении нескольких минут вам придет инструкция на указанный e-mail'); }
        else { alert('Вы не прошли защиту от спама, ответ - Москва. Попробуйте еще раз...'); }
    }
</script>
+

как прекратить выполнение пост запроса если не пройдена капча... ведь не зависимо правильно или не правильно ответил пост запрос все равно выполниться....
0
50 / 50 / 7
Регистрация: 06.05.2013
Сообщений: 79
Записей в блоге: 1
03.10.2013, 13:24 4
Смотрите , что бы использовать JS, надо подвязаться под событие Click у button ( или можно имя функции передать в атрибут onclick="myJsFunction" )

Javascript
1
2
3
4
5
6
7
8
9
10
$(document).ready(function(){
   $('#btnId').submit(function(e){
        if ($('#Capcha').val() == "Москва") { alert('Спасибо! Заявка отправлена. В течении нескольких минут вам придет инструкция на указанный e-mail'); }
        else {
$(e).preventDefault()// отменяем событие, что бы форма не отправилась
 alert('Вы не прошли защиту от спама, ответ - Москва. Попробуйте еще раз...'); }
 
     $('#Capcha').val('') // очищаем text box после  проверки 
});
});

Но я так понимаю, Вы хотите построить валидацию формы, тогда Вам не подойдет JavaScript ( его можно просто выключить и валидации не будет ). Если нужна Captcha то могу посоветовать Mvc ReCaptcha , потому что делать свой вариант - это не лучшая затея. Если Вам надо просто, показать макет и не важна безопасность и т.д , то можно заюзать JS.
1
49 / 49 / 12
Регистрация: 24.10.2012
Сообщений: 434
03.10.2013, 13:33  [ТС] 5
Цитата Сообщение от VladA4 Посмотреть сообщение
Смотрите , что бы использовать JS, надо подвязаться под событие Click у button ( или можно имя функции передать в атрибут onclick="myJsFunction" )
да, я так и сделал:
HTML5
1
 <td  style="text-align: right;"><input onclick="JsFunctionCapchaCheck" type="submit" name="operation" value="Отправить"  /></td></tr></tbody></table>
Цитата Сообщение от VladA4 Посмотреть сообщение
его можно просто выключить и валидации не будет
---
спасибо, не знал такой бреши. А как же валидируют инпуты аяксом? Или валидация валидацией а капча (безопасность) отдельно?
0
50 / 50 / 7
Регистрация: 06.05.2013
Сообщений: 79
Записей в блоге: 1
03.10.2013, 13:59 6
А как же валидируют инпуты аяксом?
Все клиентская валидация это просто для красоты и для более быстрой отзывчивости, то есть просто, что бы лишний раз не гонять форму. Скажем 95% пользователей Вашего сайта , даже не думаю его обмануть и не будут искать обходных путей.

Вся валидация должна быть обязательно на сервере ( куда ни кому не попасть ) и пожеланию дублирована на клиента.
Опираясь на свой опыт , могу посоветовать fluent validation , он на сервере, а так же может через jquery.validation использоватся на клиенте, очень удобно. По мне лучше чем DataAnonnotation из стандартного набора asp.net mvc

да, я так и сделал:
Тогда preventDefault должен помочь ! ( про него и про stop propoganation можно почитать в goolge для большего понимания работы браузера )
1
49 / 49 / 12
Регистрация: 24.10.2012
Сообщений: 434
03.10.2013, 14:31  [ТС] 7
блин все равно не так как надо, хотел по быстрому сделать:

слова подтверждения через вьюбег - ViewBag.Thanks = "Спасибо! Заявка отправлена. В течении нескольких минут вам придет инструкция на указанный e-mail";

и если так:
RedirectToAction("Contact", "Home");

то инпуты очищаются, но вьюбег похоже очищается и тишина...

а если так:
return View();

то пользователь через вьюбег получает подтверждение.... но инпуты не очищаются
0
50 / 50 / 7
Регистрация: 06.05.2013
Сообщений: 79
Записей в блоге: 1
03.10.2013, 14:35 8
Оставьте в обработчики для Input только $('[name="Capcha"]').val('');. Дело в том, что TextBox может построить только name="Capcha" , но не проставить Id и тогда Jquery не найдет Ваш textbox.

У Вас обработчик срабатывает ? Попробуйте на onsubmit повесить, а не на onclick, потому что у Вас input type="submit" , а не button
1
49 / 49 / 12
Регистрация: 24.10.2012
Сообщений: 434
03.10.2013, 14:50  [ТС] 9
я думал без скрипта сделать, раз он не годиться в плане безопасности.



попробовал:

Html.TextBox("Capcha", string.Empty)
...
<td style="text-align: right;"><input onclick="JsFunctionCapchaCheck" type="submit" name="operation" value="Отправить" /></td></tr></tbody></table>
....
<script type="text/javascript">
function JsFunctionCapchaCheck() {
alert('проверка');
if ($('[name="Capcha"]').val('Москва')) { alert('Спасибо! Заявка отправлена. В течении нескольких минут вам придет инструкция на указанный e-mail'); }
else { event.preventDefault(); alert('Вы не прошли защиту от спама, ответ - Николаев. Попробуйте еще раз...'); }
}
</script>

Дело в том, что я в функции не захожу даже... alert('проверка'); - не показывается.
0
50 / 50 / 7
Регистрация: 06.05.2013
Сообщений: 79
Записей в блоге: 1
03.10.2013, 15:29 10
Ок, давай вернем твой первый код и тогда его не много модернизируй
C#
1
2
3
4
5
6
7
8
9
10
11
12
   @{
        if(ViewBag.Rezult == "ok")   
        {<script type="text/javascript">alert('Спасибо! ')</script>}
        
        else if (ViewBag.Rezult == "bad")
        { <script type="text/javascript">alert('Вы не прошли')</script> }
 
<script type="text/javascript">
$(document).ready(function(){$('[name="Capcha"]').val('');}
</script> 
    
     }
То есть, просто добавить при старте очистку, хотя странно, что @Html.TextBox("name",string.Empty) не сработал.
1
49 / 49 / 12
Регистрация: 24.10.2012
Сообщений: 434
03.10.2013, 15:46  [ТС] 11
Цитата Сообщение от VladA4 Посмотреть сообщение
просто добавить при старте очистку
да, так очищается наконец-то, спасибо.

А почему я все таки не вхожу в функцию в ответе Очистка элементов формы после пост запроса синтаксис вродь правильный
0
50 / 50 / 7
Регистрация: 06.05.2013
Сообщений: 79
Записей в блоге: 1
03.10.2013, 15:52 12
Цитата Сообщение от lifeact Посмотреть сообщение
да, так очищается наконец-то, спасибо.

А почему я все таки не вхожу в функцию в ответе Очистка элементов формы после пост запроса синтаксис вродь правильный
Надо просто юзать $('#btnId').submit(function(){}) и будет работать , хотя может, что то не так.
1
6 / 6 / 0
Регистрация: 29.07.2013
Сообщений: 55
03.10.2013, 19:19 13
по поводу первоначального вопроса - что если в экшн перед ретурн вставить ModelState.Clear(); - тож инпут поля не очищаются?
1
49 / 49 / 12
Регистрация: 24.10.2012
Сообщений: 434
04.10.2013, 09:52  [ТС] 14
Цитата Сообщение от AndreyIvaneneko Посмотреть сообщение
по поводу первоначального вопроса - что если в экшн перед ретурн вставить ModelState.Clear(); - тож инпут поля не очищаются?
у меня и модели то нет... это простая контактная форма...
0
6 / 6 / 0
Регистрация: 29.07.2013
Сообщений: 55
04.10.2013, 11:55 15
Цитата Сообщение от lifeact Посмотреть сообщение
у меня и модели то нет... это простая контактная форма...
ModelState - это свойство контроллера(как и метод View..), его название - то личное дело микрософта. довольно полезное, особенно если постить формы.
0
04.10.2013, 11:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.10.2013, 11:55
Помогаю со студенческими работами здесь

Очистка формы после отправки данных
скрипт оправляет пост и получает данные, как очистить форму после получения ответа? &lt;script...

Очистка формы после перезагрузки страницы
Я хочу чтобы форма после перезагрузки страницы была пустая. А у меня в одном текстовом поле инпут...

Очистка поля формы, после отправки
Здравствуйте! Необходимо сделать очистку поля формы, после отправки... Знаю, что можно сделать...

Очистка полей после отправки формы
Ребята пожалуйста подправьте этот скрипт что бы он очищал поля после отправки. Просто я в JS полный...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru