Toon posts:

[C#/ASP.NET] Behouden css property

Pagina: 1
Acties:
  • 128 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb een aantal DIVjes in een repeater op mijn pagina die ik zichtbaar/onzichtbaar maak met de css style 'display'. Nu wil ik echter de staat van de div behouden bij een postback, maar dit krijg ik met geen mogelijkheid voor elkaar.

Als ik een html hidden element gebruik, dan wordt de waarde van dit hidden element niet onthouden (alhoewel deze wel zichtbaar is in Request.Form[""], maar de aspx wordt niet opnieuw gecompiled ). Als ik een asp.net hidden element gebruik, dan weet ik de naam van het element niet, dus kan ik hem niet uitlezen met javascript.

Iemand een goede tip? 8)7

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Je gebruikt CSS om je elementen zichtbaar en hidden te maken? Wat wil je precies weten tijdens je postback: welke elementen none en block als eigenschap hebben?

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • PhysicsRules
  • Registratie: Februari 2002
  • Laatst online: 22-12-2025

PhysicsRules

Dux: Linux voor Eenden

Je kan aan de div een eigen referentie naar de javascript toevoegen
ASP.NET:
1
<div id="aspid" runat="server" onClientClick="mijnCode(this);" />


Dan moet je natuurlijk wel je javascript zo inrichten dat het zo kan.

edit:
Als je permament de status van je divjes wilt opslaan is het trouwens makkelijker om elke keer een postback te doen, ipv een javascript. Als je dit met Atlas-panelen combineert is het nog snel ook,

[ Voor 30% gewijzigd door PhysicsRules op 16-10-2006 16:54 ]


Verwijderd

Topicstarter
@BtM909: jep, helemaal correct!

@PhysicsRules: ja, maar ik weet niet helemaal hoe ik het voor elkaar moet krijgen met de postback. zodra ik een postback doe dan kan krijg ik de waarde niet meer terug in mijn pagina, alhoewel ik de waarde wel kan opslaan en uitlezen in de code-behind.

edit:
Een <asp:HiddenField /> behoud zijn waarde wel met een postback, maar ik weet niet hoe ik deze naam kan uitlezen doormiddel van javascript, aangezien deze zo'n ctl00$main$etc naam heeft

[ Voor 26% gewijzigd door Verwijderd op 16-10-2006 17:01 ]


  • PhysicsRules
  • Registratie: Februari 2002
  • Laatst online: 22-12-2025

PhysicsRules

Dux: Linux voor Eenden

Als je een postback doet zodra iemand op het knopje klikt, kun je vanuit je C# code een andere style aan de div koppelen, en bovendien dit opslaan. Dan heb je daar geen javascript nodig.

Wat je ook kan proberen is die javascript referentie door ASP.Net te laten bouwen, maar daar heb ik geen ervaring mee. Dit is dus uit de losse pols.
code:
1
<div .... onClientClick="mijnCode( <%=HiddenASPField.ID %>);" />

Verwijderd

Topicstarter
ik wilde een voorbeeldje maken met wat ik probeer te bereiken, maar ik krijg deze net niet af voordat ik weg moet... Maar het idee is dit:
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
<%@ Page Language="C#" AutoEventWireup="True" %>
<html>
 <head>
    <script language="C#" runat="server">
       void Page_Load(Object Sender, EventArgs e) {
 
          if (!IsPostBack) {
             ArrayList values = new ArrayList();
 
             values.Add("Apple");
             values.Add("Orange");
             values.Add("Pear");
             values.Add("Banana");
             values.Add("Grape");
 
             Repeater1.DataSource = values;
             Repeater1.DataBind();
          }
       }
    </script>
 
 </head>
 <body>
 
    <h3>Repeater Example</h3>
 
    <form id="Form2" runat=server>
 
       <b>Repeater1:</b>
       <p>
         
       <asp:Repeater id=Repeater1 runat="server">
          <ItemTemplate>
             <div onclick="javascript:document.getElementById('<%# Container.DataItem %>').style.display == 'block' ? document.getElementById('<%# Container.DataItem %>').style.display = 'none' : document.getElementById('<%# Container.DataItem %>').style.display = 'block';" style="cursor:hand;background-color:Bisque;">Click to show/hide</div>
             <div id=<%# Container.DataItem %> style="display:block;background-color:Azure" >
                
                <%# Container.DataItem %>
                <br />
                 <asp:TextBox ID="contentVisibility" runat="server" EnableViewState="true" >block</asp:TextBox><br />
                 <input id="htmlContentVisibility" name="htmlContentVisibility" value="block" />
                 
                <br />
             </div>
             <br />
          </ItemTemplate>
 
       </asp:Repeater>
       <p>
       <asp:Button ID="Button1" runat="server" Text="Perform postback" />
    </form>
 </body>
 </html>

[ Voor 23% gewijzigd door Verwijderd op 16-10-2006 22:11 ]


  • giMoz
  • Registratie: Augustus 2002
  • Laatst online: 21-01 09:10

giMoz

iets met meester...

je kan toch helemaal niet op een div clicken die display none heeft?

Of niet natuurlijk...


Verwijderd

Topicstarter
giMoz schreef op maandag 16 oktober 2006 @ 20:18:
je kan toch helemaal niet op een div clicken die display none heeft?
Hehe, nee klopt, maar zoals ik al zei, ik kreeg het voorbeeld niet af voordat ik moest vertrekken, maar ik hoopte dat het het een idee gaf. in ieder geval heb ik nu de bovenstaande code uitgebreid zodat het hopelijk een beter idee geeft.

Met de eerste bovenste divjes kun je de onderste divjes 'toggelen', en de asp-input behoud zijn staat, maar krijgt een vaag id. De html-tekstbox wordt niet mee terug gepost helaas...
maw. ik weet niet hoe ik de waarde meegepost krijg, zodat ik er ook nog controle over heb.

  • PhysicsRules
  • Registratie: Februari 2002
  • Laatst online: 22-12-2025

PhysicsRules

Dux: Linux voor Eenden

Kun je iets meer uitwijden wat je uiteindelijk wilt bereiken. Wil je tussen sessies de stand opslaan, moet je applicatie iets doen op basis van selecties, wat is de bedoeling?

  • .Gertjan.
  • Registratie: September 2006
  • Laatst online: 17-02-2025

.Gertjan.

Owl!

Verwijderd schreef op maandag 16 oktober 2006 @ 22:17:
[...]

Hehe, nee klopt, maar zoals ik al zei, ik kreeg het voorbeeld niet af voordat ik moest vertrekken, maar ik hoopte dat het het een idee gaf. in ieder geval heb ik nu de bovenstaande code uitgebreid zodat het hopelijk een beter idee geeft.

Met de eerste bovenste divjes kun je de onderste divjes 'toggelen', en de asp-input behoud zijn staat, maar krijgt een vaag id. De html-tekstbox wordt niet mee terug gepost helaas...
maw. ik weet niet hoe ik de waarde meegepost krijg, zodat ik er ook nog controle over heb.
Zo gek is de ID niet, omdat je werkt met een repeater kan jij zelf geen uniek ID geven aan je element (als je zegt: ID=x zullen alle items dezelfde ID krijgen). Dit zal ook gebeuren als je bijvoorbeeld met masterpages werkt. Om de uniekheid van de ID te garanderen zal .NET een prefix ervoor zetten. Je kan het item wel een ID geven, maar .NET zal er dus iets voor zetten.

Om de waardes van die velden op te vragen zou je het volgende kunnen doen:
1. Aan de Request alle keys vragen en kijken of de key de door jou opgegeven ID bevat (dan weet je dus of het jouw veld is).
of
2. In plaats van een runat=server element te gebruiken kan je ook zelf een <input type=hidden> maken waar je wel de ID van kan instellen (dus ook bijvoorbeeld aan de hand van een waarde uit je data set. Deze waardes zou je vervolgens in je postback ook uit kunnen lezen uit de request. Nu weet je de ID dus kan je ze makkelijker vinden. .NET zal namelijk "niet runat=server" velden ook niet aanpassen (zover ik weet)

The #1 programmer excuse for legitimately slacking off: "My code's compiling"
Firesphere: Sommige mensen verdienen gewoon een High Five. In the Face. With a chair.


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 12-02 17:47

gorgi_19

Kruimeltjes zijn weer op :9

Verwar ID niet met ClientId :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo

Pagina: 1