none
Исключение повторного Submit с мастер-страницей RRS feed

  • Вопрос

  • Здравствуйте. Вот ссылка на код: http://www.codeproject.com/script/Articles/ViewDownloads.aspx?aid=68371

    С простой веб-формой всё прекрасно работает, refresh определяется. Но при использовании мастер-страницы refresh определяется через раз (и вообще когда-как, может 3 раза подряд а может и ни разу, закономерности нет). тег <form id="form1" runat="server" onsubmit="onPostBack()"> и подключение скрипта находится в мастер-странице. 

    На всякий слуай вот код мастер-страницы:

    <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Main.master.cs" Inherits="Opros.Main" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <meta name="keywords" content="" />
        <meta name="description" content="" />
        <link rel="stylesheet" href="mystyle.css" type="text/css" media="screen, projection" />
        <script type="text/javascript" language="javascript" src="Scripts/refdetect.js"></script>
        <asp:ContentPlaceHolder ID="head" runat="server">
        </asp:ContentPlaceHolder>
    </head>
    <body>
        <div id="wrapper">
            <form id="form1" runat="server" onsubmit="onPostBack()">
            <div id="header">
            </div>
            <!-- #header-->
            <div id="menu">
                <ul>
                    <li><a href="Default.aspx">На Главную</a></li>
                    <li><a href="AddTema.aspx" accesskey="1">adm</a></li>
                </ul>
            </div>
            <!--Menu-->
            <div id="contents">
                <div id="content">
                    <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
                    </asp:ContentPlaceHolder>
                </div>
                <!--content-->
                <div style="clear: both;">
                    &nbsp;</div>
            </div>
            <!-- #contents-->
            <div id="rasp">
            </div>
           </form>
        </div>
        <!-- #wrapper -->
        <div id="footer">
        </div>
        <!-- #footer -->
    </body>
    </html>

    И код ведомой страницы:

    <%@ Page Title="" Language="C#" MasterPageFile="~/Main.Master" AutoEventWireup="true" CodeBehind="WebForm4.aspx.cs" Inherits="Opros.WebForm4" %>
    <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
    <title>add</title>
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
        <br />
        <br />
        <asp:ListBox ID="ListBox1" runat="server" DataSourceID="LinqDataSource1" 
            DataTextField="Tematika" DataValueField="ID" Height="291px" Width="386px">
        </asp:ListBox>
        <br />
        <asp:LinqDataSource ID="LinqDataSource1" runat="server" 
            ContextTypeName="Opros.OprosDataContext" EntityTypeName="" 
            TableName="TemaVoprosa">
        </asp:LinqDataSource>
    </asp:Content>

    Логика ведомой страницы:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace Opros
    {
        public partial class WebForm4 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
    
            }
    
            protected void Button1_Click(object sender, EventArgs e)
            {
                if ((bool)HttpContext.Current.Items["IsRefresh"])
                {
                    ListBox1.DataBind();
                    return;
                }
                if (TextBox1.Text.Length <1) return;
                OprosDataContext op = new OprosDataContext();
                TemaVoprosa tv = new TemaVoprosa
                {
                    Tematika = TextBox1.Text
                };
                op.TemaVoprosa.InsertOnSubmit(tv);
                op.SubmitChanges();
                TextBox1.Text = "";
                ListBox1.DataBind();
            }
    
        }
    }


    • Изменено Boguyang 27 декабря 2012 г. 11:34
    27 декабря 2012 г. 11:32

Ответы

Все ответы

  • Привет

    Может быть вам тогда использовать элемент UpdatePanel для частичной отправки данных и исключения обновления всей страницы?


    Для связи [mail]

    28 декабря 2012 г. 7:42
    Модератор
  • То есть UpdatePanel будет располагаться на мастер странице и содержать в себе ContentPlaceHolder? 

    P.S. Фигня какая-то. Убираю ссылку на таблицу стилей и ссылку на js скрипт (скрипт пишу прямо в head) и всё начинает работать нормально. Возвращаю обратно - через раз работает. 

    28 декабря 2012 г. 8:23
  • Можете показать скрипт?
    28 декабря 2012 г. 8:25
    Модератор
  • <script type="text/javascript">
            function onPostBack() {
                var y = generateRandomSequence();
                var hdnGuid = document.getElementById("hdnGuid");
                hdnGuid.value = y;
            }
            function generateRandomSequence() {
                var g = "";
                for (var i = 0; i < 32; i++)
                    g += Math.floor(Math.random() * 0xF).toString(0xF)
                return g;
            }
            </script>


    28 декабря 2012 г. 8:50
  • Хотя и скрипт тут не причем. Вся проблема в таблице CSS. Без CSS оформления всё работает, с CSS не работает. Таблицу стилей как подключал из файла так и в код самой страницы помещал - без разницы. 

    Вот на всякий случай код css:

    * {
    	margin: 0;
    	padding: 0;
    }
    html {
    	height: 100%;
    }
    body {
    	font: 12px/18px Arial, Tahoma, Verdana, sans-serif;
    	width: 100%;
    	height: 100%;
    	/*background: #CECECE url(images/img1.png);*/
    }
    a {
    	color: blue;
    	outline: none;
    	text-decoration: underline;
    }
    
    p {
    	margin: 0 0 18px
    }
    img {
    	border: none;
    }
    input {
    	vertical-align: middle;
    }
    
    
    
    
    
    p, ul, ol, blockquote {
    	margin-top: 0;
    }
    
    a:link {
    	color: #730000;
    }
    
    a:hover {
    	text-decoration: none;
    }
    
    
    #wrapper {
    	width: 1000px;
    	margin: 0 auto;
    	min-height: 100%;
    	height: auto !important;
    	height: 100%;
    }
    
    
    /* Header */
    
    #header {
    	width: 1000px;
    	height: 200px;
    	margin: 0 auto;
    	background: url(images/header.png);
    }
    
    #header * {
    	margin: 0;
    	text-decoration: none;
    	text-transform: lowercase;
    	font-weight: normal;
    	color: #FFFFFF;
    }
    
    /* Menu */
    
    #menu {
    float:right;
    	width: 200px;
    	height: 41px;
    	margin: 0 auto;
    	background: #2E2E2E url(images/img3.gif)
    }
    
    #menu ul {
    float: right;
    	margin: 0;
    	padding: 0;
    	list-style: none;
    }
    
    #menu li {
    	display: inline;
    }
    
    #menu a {
    	display: block;
    	float: left;
    	height: 32px;
    	padding: 9px 20px 0 20px;
    	text-decoration: none;
    	color: #CCCCCC;
    }
    
    #menu a:hover, #menu .active a {
    	background: url(images/img4.gif);
    	color: #FFFFFF;
    }
    
    
    #contents {
    	width: 1000px;
    	margin: 0 auto;
    	background: #FFFFFF;
    }
    #content {
    	padding:70px 20px 0 20px;
    }
    
    #rasp{
    height:50px;
    }
    /* Footer
    -----------------------------------------------------------------------------*/
    #footer {
    	width: 1000px;
    	margin: -50px auto 0;
    	height: 50px;
    	;
    	/*background: #CCCCCC;*/
    	background: url(images/footfon.png);
    	font-size: smaller;
    	text-align: center;
    }
    

    28 декабря 2012 г. 16:22
  • Привет.

    Это очень странно, что визуальное оформление влияет на поведение кода, вы точно уверены что это из-за css? Попробуйте тогда частями подключать этот файл, может получится что еще найти.


    Для связи [mail]

    9 января 2013 г. 7:04
    Модератор
  • Вам удалось решить проблему? Если нет попытаюсь посмотреть как время будет.
    12 января 2013 г. 11:14
    Модератор
  • Пока отложил эту проблему. Буду пробовать подключать css по частям и изменять разметку мастер-странички
    12 января 2013 г. 13:45
  • В браузерах есть инструмент отладки - можно посмотреть клиентские ошибки. IE Developers Tools, Chrome developers Tools или Firebug.. В общем нажмите в браузере F12 и посмотрите (вкладка Console) - какие ошибки происходят. 

    А потом тут не забудьте отписать в чем было дело ;)


    Exclusive access to top developers. Remote job for top developers.

    16 января 2013 г. 18:15