Avatar billede per2edb Praktikant
30. oktober 2010 - 17:54 Der er 16 kommentarer og
1 løsning

Underside skal ikke kalde master

Jeg benytter expression web4 og asp.net (aspx)
Jeg har en Master side med tekst/grafik.
På denne master ligger en menu
Når jeg fra en underside klikker menuen  kaldes masteren forfra hvorved masterens tekst/grafik køres en gang til der resulterer i et blink.
Hvordan undgår jeg det?

Undersiden forbindes således fra masteren:
<div id="content" runat="server">
    <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
    </asp:ContentPlaceHolder>
</div>

Jeg er ny i asp.net.
Avatar billede keysersoze Guru
30. oktober 2010 - 18:53 #1
som jeg forstår det, så er det du vil undgå et synligt sideskift - hvis det er korrekt skal du kigge på AJAX, fx i form af AJAX frameworket og kontrollerne fra Microsoft eller jQuery. Til dette skal dog nævnes, at søgemaskiner ikke kan læse javascript, som AJAX består af, hvilket som udgangspunkt forhindrer indeksering i søgemaskinerne og samtidig vil brugervenligheden også blive mindsket da URL ikke skifter så besøgende kan ikke linke direkte til undersider.
Avatar billede bkp Nybegynder
30. oktober 2010 - 19:58 #2
Keysersoze har et godt point med at anbefale Ajax, men du kan faktisk godt gøre det søgemaskine venligt.
Jeg vil anbefale dig at se nærmere på dette eksempel som bygger på jQuery:
http://jqapi.com/#p=load
Hvis du opbygger din menu som almindelig links, og lader tilføjer en click event til dine links via jQuery så vil søgemaskine opfange linket og læse dine undersider, og dem der ikke har javascript slået til vil stadig kunne se dine undersider, da dine links stadig virker, men for en med javascript enabled, vil indholdet blive hentet via Ajax, og alt vil køre smoth.

Hvis jQuery er nyt for dig kan jeg kraftigt anbefale at se denne serie som giver et godt indblik og som giver eksempler på det du ønsker, men husk at lave dine links så de virker for alle.
http://bkristensen.tumblr.com/post/998469255/jquery-hvor-skal-jeg-starte
Avatar billede per2edb Praktikant
30. oktober 2010 - 22:18 #3
Jeg er lige begyndt på ASP.NET og så skal jeg skifte til 3 andre!. Det ønsker jeg ikke.
Er der nogen der kan fortæle hvordan man undgår at masteren kaldes når menuen aktiveres?
Avatar billede keysersoze Guru
30. oktober 2010 - 23:28 #4
skifte til 3 andre? Det handler ikke om at skifte men om inddragelse af ekstra teknologier - ASP.NET arbejder på serveren mens det du ønsker kræver brug af en klient-teknologi og det er fx javascript. Som nævnt så indeholder ASP.NET allerede AJAX frameworket, så du kan kigge på det hvis du vil undgå at skulle lære alt for meget nyt; http://www.asp.net/ajax.

Svaret vil derfor stadig være - du kan ikke løse din udfordring uden at udvidde din horisont med begrebet AJAX eller alternativt simpelt javascript med noget show/hide layer (hvilket mere eller mindre er indbygget i jQuery til at være ekstremt simpelt). Vil du ikke kigge på nogle af de nævnte ting muligheder er du tvunget til at beholde dit postback/sideskift.
Avatar billede bkp Nybegynder
31. oktober 2010 - 07:43 #5
Jeg ved at nogen måske ville nævne IFrame som en mulighed, men jeg vil klart anbefale AJAX (i hvilken form du nu vælger) som keysersoze.

Hvis du hellere vil bruge Microsoft Ajax Toolkit (som bygger på jQuery) så er her en guide til hvordan du implementerer det:
http://www.asp.net/ajaxlibrary/act.ashx

Der er en masse tutorials omkring ajax på nettet:
http://www.asp.net/ajaxlibrary/act_tutorials.ashx

Jeg vil dog på det kraftigste anbefale dig at se denne serie, det vil helt klart give dig blod på tanden.
http://bkristensen.tumblr.com/post/998469255/jquery-hvor-skal-jeg-starte

Læg måske især mærke til dag 10, og se et eksempel her:
http://themeforest.s3.amazonaws.com/22_jQueryForBeginners/jquery_10/index.html
Avatar billede bkp Nybegynder
31. oktober 2010 - 08:05 #6
For at illustrere hvor nemt det er, har jeg bikset et meget simpelt eksempel sammen, det er i html, men kan sagtens bruges i dine aspx sider.

Hent det her: http://static.tumblr.com/6kgdwmv/Mwblb57jm/ajaxdemo.zip

Index.html
==========
<html>
<head>
  <script src="http://code.jquery.com/jquery-latest.min.js"></script>
</head>
<body>
<h1>Hoved</h1>
<a href="side1.htm" class="menulink">Side 1</a> - <a href="side2.htm" class="menulink">Side 2</a>
<div id="ajaxbody"></div>
<script type="text/javascript">
    $(document).ready(function () {
        $('.menulink').click(function () {
            // Hent div-body2 fra link ind i ajaxbody
            $('#ajaxbody').load($(this).attr('href') + ' #body2');
            return false;
        });
    });
</script>
</body>
</html>

side1.htm
=========
<html>
<head>
</head>
<body>
  <h1>Hoved</h1>
  <a href="side1.htm" class="menulink">Side 1</a> - <a href="side2.htm" class="menulink">Side 2</a>
  <div id="body2">
    <h1>Dette er side 1</h1>
  </div>
</body>
</html>


side2.htm
=========
<html>
<head>
</head>
<body>
  <h1>Hoved</h1>
  <a href="side1.htm" class="menulink">Side 1</a> - <a href="side2.htm" class="menulink">Side 2</a>
  <div id="body2">
    <h1>Dette er side 2</h1>
  </div>
</body>
</html>
Avatar billede bkp Nybegynder
31. oktober 2010 - 08:06 #7
Ovenstående vil virke for alle, også dem der ikke har slået javascript til, og for søgemaskiner.
Avatar billede bkp Nybegynder
31. oktober 2010 - 19:21 #8
Lavede lige en demo side her:

http://bkristensen.tumblr.com/jQueryAjaxLink
Avatar billede per2edb Praktikant
01. november 2010 - 14:55 #9
1000 tak for jeres hjælp. Det er noget af en opgave for en nybegynder som mig at sætte sig ind i.
Jeg benytter dhtmlgoodies.com menu. Den ligger inden i en:

<script type="text/javascript">
var menuModel3 = new DHTMLSuite.menuModel();
menuModel3.addItem(100,'Produkt','','Forside.aspx',false);

Kan det laves i din opsætning med AJAX og JQuery?

Mit andet spørgsmål er:
Jeg skal have lavet en sider hvor indholdet fra en tekstbox sendes til min e-mail adresse ved tryk på en button.
Kan det laves i AJAX og JQue og har i et link til en toturial?
Avatar billede bkp Nybegynder
01. november 2010 - 18:02 #10
Jeg har lige kigget på dokumentationen og jeg kan se at der er mulighed for at overføre navn på en funktion via jsFunction parameteren.

addItem(id,itemText,itemIcon,url,parentId,helpText,jsFunction,type,submenuWidth)

Men jeg har også lige brugt Firebug på en demo side og jeg kan se at alle menuer har class='DHTMLSuite_menuItem_top_regular' så jeg ville omskrive scriptet til at gøre følgende:

<head>
  <script src="http://code.jquery.com/jquery-latest.min.js"></script>
  ...
</head>
<body>
  ...
  <div id="ajaxbody"></div>
  ...

<script type="text/javascript">
    $(document).ready(function () {
        $('.DHTMLSuite_menuItem_top_regular').click(function () {
            // Hent div-body2 fra link ind i ajaxbody
            $('#ajaxbody').load($(this).attr('href') + ' #ajaxbody');
            return false;
        });
    });
</script>
...

Jeg ved ikke om det virker men du kan da give det et forsøg.

Ang. at sende en mail via Ajax så kan det sagtens lade sig gøre, men det kræver lidt arbejde, men prøv lige at se dette link, måske kan det lede dig i den rigtige retning:
http://trevordavis.net/blog/ajax-forms-with-jquery/

Tjek også denne:
http://www.queness.com/post/160/create-a-ajax-based-form-submission-with-jquery

Noget af det er PHP, men det skal bare omskrives lidt ;-)

Kan ikke lige nå at give et direkte eksempel, men jeg tror at disse link vil kunne hjælpe dig.
Avatar billede bkp Nybegynder
01. november 2010 - 18:03 #11
Jeg tror desuden video nr. 13 i denne serie vil være en stor hjælp for dig:
http://bkristensen.tumblr.com/post/998469255/jquery-hvor-skal-jeg-starte
Avatar billede per2edb Praktikant
01. november 2010 - 21:13 #12
Det virker ikke, men jeg har nok sat det forkert op.
Der er stadig blink som om ajaxen ikke har indvirkning.
Jeg har søgt på DHTMLSuite_menuItem_top_regular men kan ikke se den. Hvordan trækked den ind?

Jeg har lavet det således:

<script type="text/javascript">
           
var menuModel3 = new DHTMLSuite.menuModel();
                   
menuModel3.addItem(100,'Produkt','','Forside.aspx',false);
            menuModel3.addSeparator();
menuModel3.addItem(101,'Intro.','','Forside2.aspx',false);
            menuModel3.addSeparator();
            menuModel3.init();
           
            var menuBar3 = new DHTMLSuite.menuBar();
            menuBar3.addMenuItems(menuModel3);
            menuBar3.setTarget('Vandret_Menu');
            menuBar3.setActiveSubItemsOnMouseOver(true);
            menuBar3.init();

            </script>
           
                               
<div id="ajaxbody"></div>

<script type="text/javascript">
    $(document).ready(function () {
        $('.DHTMLSuite_menuItem_top_regular').click(function () {
            // Hent div-body2 fra link ind i ajaxbody
            $('#ajaxbody').load($(this).attr('href') + ' #ajaxbody');
            return false;
        });
    });
</script>
Avatar billede per2edb Praktikant
04. november 2010 - 00:08 #13
Ja i dokumentationen står der jsFunction kan overføre en funktion.
Jeg har lavet det som nedenfor vist men hele siden lodes stadig ind.
Jeg er villig til at give 200 point hvis i kan løse det
--------------------------------------------------------

<script type="text/javascript">
           
var menuModel3 = new DHTMLSuite.menuModel();
                   
menuModel3.addItem(100,'Produkt','','Forside.aspx',false,,'','.DHTMLSuite_menuItem_top_regular');
            menuModel3.addSeparator();
menuModel3.addItem(101,'Intro.','','Forside2.aspx',false,,'','.DHTMLSuite_menuItem_top_regular');
            menuModel3.addSeparator();
            menuModel3.init();
           
            var menuBar3 = new DHTMLSuite.menuBar();
            menuBar3.addMenuItems(menuModel3);
            menuBar3.setTarget('Vandret_Menu');
            menuBar3.setActiveSubItemsOnMouseOver(true);
            menuBar3.init();

            </script>
           
                               
<div id="ajaxbody"></div>

<script type="text/javascript">
    $(document).ready(function () {
        $('.DHTMLSuite_menuItem_top_regular').click(function () {
            // Hent div-body2 fra link ind i ajaxbody
            $('#ajaxbody').load($(this).attr('href') + ' #ajaxbody');
            return false;
        });
    });
</script>
Avatar billede bkp Nybegynder
04. november 2010 - 06:21 #14
Jeg kan se et problem, men jeg vil gerne at du mailer mig hele din master side, så skal jeg nok give løsning her.
Jeg poster dig lige min email adresse.
Avatar billede bkp Nybegynder
04. november 2010 - 09:46 #15
Jeg har kigget lidt nærmere på ovenstående, og jeg tror jeg har fundet alle fejlene nu, jeg vil lige liste dem en efter en:

1. Du har et komma for meget i dit addItem kald
menuModel3.addItem(100,'Produkt','','Forside.aspx',false,,'','.DHTMLSuite_menuItem_top_regular');


2. Du kalder navnet på en klasse og ikke en funktion
menuModel3.addItem(100,'Produkt','','Forside.aspx',false,,'','.DHTMLSuite_menuItem_top_regular');


3. Den vigtigste div svæver i det fri, men den skal rundt om din ContentPlaceholder for at dine undersider som nedarver fra samme master har denne sektion, du beder jo load funktionen om at hente data kun fra denne sektion, men den vil være tom fordi den svæver i det fri.
<div id="ajaxbody"></div>


4. Dit script skal laves om så den har en funktion du kan kalde fra dine links.

Her er mit forslag til det endelige resultat:
<script type="text/javascript">
    function linkClick(source) {
        var link = $(source).children('a')[0].attr('href');
        $('#ajaxbody').load(link + ' #ajaxbody');
        return false;
    };


    $(document).ready(function () {
        var menuModel3 = new DHTMLSuite.menuModel();

        menuModel3.addItem(100, 'Produkt', '', 'Forside.aspx', false, '', 'linkClick');
        menuModel3.addSeparator();
        menuModel3.addItem(101, 'Intro.', '', 'Forside2.aspx', false, '', 'linkClick');
        menuModel3.addSeparator();
        menuModel3.init();
           
        var menuBar3 = new DHTMLSuite.menuBar();
        menuBar3.addMenuItems(menuModel3);
        menuBar3.setTarget('Vandret_Menu');
        menuBar3.setActiveSubItemsOnMouseOver(true);
        menuBar3.init();
    });
</script>
</head>
<body>
    <form id="serverForm" runat="server">
    <div id="Vandret_Menu"></div>
    <hr />
    <div id="ajaxbody">
        <asp:ContentPlaceHolder ID="ContentBody" runat="server"></asp:ContentPlaceHolder>
    </div>

    </form>
</body>
</html>
Avatar billede per2edb Praktikant
07. november 2010 - 15:11 #16
1000 tak for hjælpen
Jeg kan varmt anbefale løsningen til andre
Pkp du bør udvide dine toturial med anvisning på hvordan man laver forbindelsen mellem ajax funktionen og forskellige menuer,
så mange flere får gavn af det.

Min underside startes ikke mere forfra, men der er stadig et blink fra menuerne efter jeg har trykket på dem.
For at kunne give point igen opretter jeg et nyt spørgsmål herom
Avatar billede bkp Nybegynder
07. november 2010 - 18:52 #17
Jo tak, jeg er bare bange for at min tutorial bliver for omfattende, hvis den skal kunne tage højde for alt :-)

Men tak for roserne ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester