Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# под Web, ASP.NET

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Volkforlive
0 / 0 / 0
Регистрация: 05.08.2013
Сообщений: 26
#1

Повторная отправка данных - C# ASP.NET

13.08.2013, 10:51. Просмотров 1520. Ответов 7
Метки нет (Все метки)

Добрый день!

Как убрать повторную отправку формы при нажатии кнопки?

Ситуация такая:
Есть веб приложение-страница, на нем GridView с таблицей и пара кнопок -одна из них-Добавить-
при нажатии открывает PopUp окно со списком (aspx), из которого и выбираем кого хотим добавить.

После этого, нажимаем на дочерней кнопке -Add и происходит вычисление,добавление в базу новых пользователей.
Дальше , выполняется перезагрузка родительской страницы с тем, чтобы по приходу POST запроса обновить GridView и отобразить GridView с новыми добавленными пользователями.

Проблема в том, что по нажатию кнопки Add на дочерней форме вываливается окно с предупреждением,что данные будут отправлены повторно.

Теперь код. Для передачи того,что дочерняя форма выполнила все что нужно я использую
Page.Session["isPopUp"] = "true";
А чтобы их дочерней формы перезагрузить родительскую страницу-
ButtonAdd.OnClientClick = "window.opener.location.reload(true);close();";

Родительская страница:
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
 protected void Page_Load(object sender, EventArgs e)
        {
            
            if (!Page.IsPostBack)
            {
 
 
                GridViewRedactorNames.DataSource = dtRedactor;
                GridViewRedactorNames.DataBind();
 
         
            
            }
            else
            { //PostBack
 
 
               
                String s = (String)Page.Session["isPopUp"];
                Console.WriteLine(s);
                if (s != null)
                {
                    if ("true" == s)
                    {
                      [B]  Page.Session["isPopUp"] = "false";[/B]
                        dtRedactor = testProject5.Data.PersonReadWriteData.getAllPersons(connRedactor, queryRedactor);
                        GridViewRedactorNames.DataSource = dtRedactor;
                        GridViewRedactorNames.DataBind();
                    }
                    else
                    {
                        
                    }
                }
                else
                {
                  
                }
            }
   }
Дочерняя страница:

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
 protected void Page_Load(object sender, EventArgs e)
        {
            
 
            Page.Session["isPopUp"] = "true";
            if (!Page.IsPostBack)
            {
                Page.Session["isPopUp"] = "true";
            [B]    ButtonAdd.OnClientClick = "window.opener.location.reload(true);close();";[/B]
                Console.WriteLine("");
                List<String> DiffLstPersons = new List<string>();
                DiffLstPersons =   Logic.getListDiffPersons();
 
 
                ListBox.DataSource = DiffLstPersons;
                ListBox.DataBind();
              //  Page.ClientScript.RegisterStartupScript(this.GetType(), "close()", "<script language=javascript>window.opener.location.reload(true);close();</script>");
            }
           // ButtonAdd.Attributes.Add("onclick", "window.opener.location.reload(true);close();");
// Page.ClientScript.RegisterStartupScript(this.GetType(), "hi", "<script language=javascript>window.opener.location.reload(true);close();</script>");
            
   
        }
protected void ButtonAdd_Click(object sender, EventArgs e)
        {
                              
            dtOriginal = PersonReadWriteData.getAllPersons(PersonReadWriteData.getConnectionStringReadTable(),PersonReadWriteData.getFilterQueryReadTable());
            if (ListBox.Items != null)
            {
                int ins = 0;
                int[] selectIndexes; selectIndexes = ListBox.GetSelectedIndices();
                Console.WriteLine(selectIndexes.Length);
                DataRow row;
                Console.WriteLine(selectIndexes+""+selectIndexes.Length);
                for (int i = 0; i < selectIndexes.Length; i++)
                {
 
                    row = Logic.getDataRowFromListItem(ListBox.Items[selectIndexes[i]], dtOriginal);
                
                    ins = PersonReadWriteData.setPersonRowsIntoDB(PersonReadWriteData.getConnectionStringWriteTable(),
                        PersonReadWriteData.getFilterQueryWriteTable(), row);
                }
                List<String> DiffLstPersons = new List<string>();
                DiffLstPersons = Logic.getListDiffPersons();
 
               
 
 
 
              
            //    HttpContext.Current.Response.Redirect(HttpContext.Current.Request.Url.ToString());
             //  Page.ClientScript.RegisterStartupScript(this.GetType(), "hi", 
             //      "<script language=javascript>window.opener.location.reload(true);close();</script>");
           
            }
            else
            {
                Console.WriteLine("");
            }
           
                
                
        }
Подскажите пожалуйста, как убрать повторную отправку данных?
Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2013, 10:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Повторная отправка данных (C# ASP.NET):

Отправка данных другому пользователю и ожидание данных от него - C# ASP.NET
Всем привет!) Такой вопрос: у меня есть js игра на asp,которая выполняется на стороне клиента и время от времени должна передавать данные...

Сокеты и отправка данных - C#
Доброго времени суток, форумчане... У меня есть сервер на яве и клиент на C#. Они общаются, отсылают друг-другу информацию, но периодически...

Отправка данных в сокет - C#
Здравствуйте, уважаемые программисты. Недавно начала изучать c#, столкнулся с проблемой. Пытаюсь написать http-сервер, используя...

Отправка данных на сайт - C# ASP.NET
Доброго времени суток. Необходимо отправить данные в эти формы: &lt;input type=&quot;text&quot; name=&quot;username&quot; class=&quot;form-control&quot; id=&quot;username&quot;...

отправка данных из формы - C# ASP.NET
как можно осуществить отправку данных из формы методом POST ?

Отправка данных в mysql - C#
Как можно отправить из программы данные в mysql на сервер или в txt файлик???

7
andrew_w2k
322 / 322 / 10
Регистрация: 04.03.2010
Сообщений: 648
13.08.2013, 15:08 #2
HTML5
1
AutoPostBack="false"
не?
0
Volkforlive
0 / 0 / 0
Регистрация: 05.08.2013
Сообщений: 26
13.08.2013, 15:27  [ТС] #3
А куда его вставлять?
0
andrew_w2k
322 / 322 / 10
Регистрация: 04.03.2010
Сообщений: 648
13.08.2013, 15:44 #4
в разметку
1
Volkforlive
0 / 0 / 0
Регистрация: 05.08.2013
Сообщений: 26
14.08.2013, 13:36  [ТС] #5
Цитата Сообщение от andrew_w2k Посмотреть сообщение
в разметку
В GridView это нельзя вставить..

Добавлено через 19 часов 25 минут
Цитата Сообщение от andrew_w2k Посмотреть сообщение
в разметку
Можете привести хотя бы небольшой пример? А то мне непонятно куда именно вставлять это свойство.

Добавлено через 2 часа 14 минут
Еще код дочерней страницы:
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
<asp:Content ID="PageHead" ContentPlaceHolderID="PlaceHolderAdditionalPageHead" runat="server">
 
</asp:Content>
<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
   
    
    <asp:ListBox ID="ListBox" runat="server" SelectionMode="Multiple" Font-Size="Medium" Rows="8"></asp:ListBox>
   
 
    <asp:Button ID="ButtonAdd" runat="server" Text="Добавить" OnClick="ButtonAdd_Click"   Height="45" Width="200" CssClass="Layouts/CSS/Stylesheet1.css" />
  
         
    <p>
        <script type="text/javascript">
         
            function Exit()
            {
                window.opener.location.reload(true);
                close();
            }
        </script>
 
    </p>
      
</asp:Content>
<asp:Content ID="PageTitle" ContentPlaceHolderID="PlaceHolderPageTitle" runat="server">
Application Page
</asp:Content>
 
<asp:Content ID="PageTitleInTitleArea" ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea" runat="server" >
My Application Page
</asp:Content>
0
HF
116 / 117 / 14
Регистрация: 09.09.2011
Сообщений: 428
Завершенные тесты: 16
14.08.2013, 14:11 #6
Цитата Сообщение от Volkforlive Посмотреть сообщение
Проблема в том, что по нажатию кнопки Add на дочерней форме вываливается окно с предупреждением,что данные будут отправлены повторно.
Где-то явно чего-то не написано, так как не видно как вызывается Exit(). А я считаю что именно из-за него это и появляется. Потому что он банально делает F5. А эффект "Данные будут обновлены..." всегда и проявляется из-за обновления страницы таким образом. А вот если бы это был postback и данные обновились просто как загрузка новой страницы, то не должно быть.
1
Volkforlive
0 / 0 / 0
Регистрация: 05.08.2013
Сообщений: 26
14.08.2013, 16:05  [ТС] #7
Цитата Сообщение от HF Посмотреть сообщение
Где-то явно чего-то не написано, так как не видно как вызывается Exit(). А я считаю что именно из-за него это и появляется. Потому что он банально делает F5. А эффект "Данные будут обновлены..." всегда и проявляется из-за обновления страницы таким образом. А вот если бы это был postback и данные обновились просто как загрузка новой страницы, то не должно быть.
У меня Exit() нигде не вызывается.. Использую
C#
1
ButtonAdd.OnClientClick = "window.opener.location.reload(true);close();";
Добавлено через 49 минут
Цитата Сообщение от Volkforlive Посмотреть сообщение
А вот если бы это был postback и данные обновились просто как загрузка новой страницы, то не должно быть.
А как это сделать?
То есть , в идеале , должно быть так: кнопка на родительской форме срабатывает, посылает postback. Там этот postback (на родительской форме) ловит Page_Load и обновляет страницу, а точнее просто перебиндивает GridView.

Но как это сделать?

Добавлено через 11 минут
Может есть способ через
C#
1
Page.Parent. что то там
сделать?

Добавлено через 16 минут
Так. На иноземном форуме нашел решение:
Javascript
1
2
3
4
5
   ButtonAdd.OnClientClick = "window.onunload = refreshParent;close(); " +
            "function refreshParent() {" +
            "var loc = window.opener.location;" +
            "window.opener.location = loc;" +
            "close(); }";
Взято тут.

Родительская форма обновляется на ура!
Но почему дочерняя форма не закрывается?

Добавлено через 4 минуты
Javascript
1
window.close();
спасает!)

Спасибо за помощь!
0
sau
1592 / 1420 / 129
Регистрация: 22.07.2011
Сообщений: 5,329
Завершенные тесты: 1
14.08.2013, 16:10 #8
HTML5
1
ButtonAdd.OnClientClick = "window.opener.location.href =  window.opener.location.href;close();";
Чуток не успел ).
1
14.08.2013, 16:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2013, 16:10
Привет! Вот еще темы с ответами:

WebBrowser post отправка данных - C#
Всем привет , я уже делал отправку данных средствами webbrowser но раньше она выглядела так Исходный код...

Отправка данных с сервера на сервер. - C# ASP.NET
Люди, подскажите! Можно ли с помощью ASP или чего другого отправить данные (форму, поля формы) с сервера на другой сервер?

Отправка данных в другую форму - C# ASP.NET
Всем привет. Есть два файла : spisokst.asp - вывод списка студентов и Фамилии И.О куратора группы. editst.asp - редактирования...

Отправка данных в стороннее приложение - C#
Доброго времени суток! Хотелось бы узнать, как сделать так чтобы например в текстбокс было введено имя программы, а по имени, в результате...


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

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

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