webForumDet fria alternativet

Behålla värden vid popup fönster, uppdatera parent

.NET

10 svar · 756 visningar · startad av erka

Medlem sedan dec. 19996 522 inlägg
Frågan#1

Hej jag har en sida som tar emot ett Id, den fyller en massa dropdownlistkontroller med data, vid varje dropdownlistkontroll finns en imagebutton som öppnar ett popup-fönster med exempelvis

plusSign1.Attributes.Add("onclick", "window.open('HorseCreatePop.aspx',null,'height=450, width=600,status= no, resizable= no, scrollbars=yes, toolbar=no,location=no,menubar=no ');");

Där kan man fylla i x antal textbox och när man klickar på en knapp stängs popup-en och det körs en refresh på fönstret som öppnade popup-en via

<!--
function refreshParent() {
window.opener.location.href = window.opener.location.href;

if (window.opener.progressWindow)

{
window.opener.progressWindow.close()
}
window.close();
}
//-->

Sidan laddas om helt och värden jag valt i dropdownlistkontrollerna är inte valda, de finns där men om jag tex väljer ett alternativ i den ena, klickar på knappen får upp min popupp, stänger den så blir ju det första värdet i dropdownlisterna valda.

Någon som har ett förslag på hur jag kan lösa det här, hur jag kan få det underliggandet fönstret när det uppdateras via popuppen att komma ihåg tidigare val?

tacksam

Medlem sedan feb. 20011 198 inlägg
#2

Skicka värdena som querystring istället för att ladda om sidan.

Medlem sedan dec. 19996 522 inlägg
#3

Hur menar du nu? Ska jag skicka querystrings till min sida som öppna fönstret från fönstret så att säga? Ser inte hur det skulle kunna hjälpa

Medlem sedan maj 20012 812 inlägg
#4

Antagligen så håller dina kontroler inte sin state för att du INTE gör en postback, utan gör en refresh på sidan.

Smidigast lösningen är nog att du har en javascriptfunktion på din MAIN-sida som körs när ditt popup-fönster stängs. I denna funktion skall du simulera en postback till sidan. Har aldrig gjort det förr, så jag vet inte säkert hur man gör, men det finns säkert exempel på nätet hur man fejkar en postback till din sida.

- M

Medlem sedan dec. 19996 721 inlägg
#5

Följande skulle kunna funka...


if (window.opener.__doPostBack)
   window.opener.__doPostBack('','');

Förutsätter att någon av kontrollerna på opener-sidan har krävt ett __doPostBack-skript, t.ex. en gömd linkbutton.

Medlem sedan dec. 19996 522 inlägg
#6

Tack emission, men vad exakt menar du med "opener-sidan har krävt ett __doPostBack-skript"

Medlem sedan dec. 19996 721 inlägg
#7

Jo, det jag menar är att "opener-sidan", dvs. den sida du vill ladda om, måste ha javascript-metoden "__doPostBack", definierad. Framework:et inkluderar denna metod automatiskt, om det finns en kontroll på sidan som kräver javascript för att kunna göra en submit (dvs, det är inte en submit-knapp). Kolla "view source" på sidan, så hittar du säkert funktionen.

Eventuellt fungerar även detta (och då krävs inte det som nämns ovan)

window.opener.document.forms[0].submit();
Medlem sedan dec. 19996 522 inlägg
#8

Tack emission, jag löste det med att lägga till ett RegisterStartupScript och den första kodsnutten du gav mig. Dock uppkom ett eminent problem med den underbara postbacken.

Funktionaliteten i den underliggande sidan går ut på att det är 14 dropdownlistkontroller som populleras med data från en databas i pageload. vid varje dropdownlistkontroll finns en imagebutton, det är om man klickar på en sådan popup-rutan kommer fram. Vad man gör i popupprutan är att man lägger till en post i databasen som sedan även ska finnas i hälften av de 14 dropdownlisterna efter man submittat infon i popup-rutan och den stängts och framkallat postbacken på sidan under. Det är det jag inte kan klura ut hur jag ska lösa.

Som jag har nu så fyller jag bara dropdownlisterna om det inte skett en postback. För jag vill ju inte att de ska fyllas på och fyllas på så att säga. Jag kan heller inte varje gång en postback sker tömma värdena i dropdownlisten och poppulera dem på nytt för då vet jag inte vilken som var vald innan postbacken.

Som jag ser det finns det två lösningar men bägge känns rätt omständiga. Det ena är att i dropdownlisterna onselectionindexchanged dunka i en cookie som talar om vilken listitem som senaste blev vald, den andra är att varje gång en postbacks körs, fylla dem med infon men bara ta med de som inte redan existerar. Finns det något lättare sätt?

Tacksam för åsikter

Medlem sedan dec. 19996 721 inlägg
#9

Man kan få kontrollen at "komma ihåg" värdet genom att strunta i viewstaten, och sätta värdet själv.

DropDownList1.SelectedValue=Request.Form["DropDownList1"];

Det finns 3892 andra tänkbara lösningar, med allt från ren clientside-kod till specialbyggda kontroller. En relativt enkel variant, eftersom lösningen på ett eller annat sätt ändå bygger på kommunikation mellan fönstren, vore att popup-fönstret inte själv uppdaterar databasen, utan att den endast skickar över infon via Javascript.


popup:

function AddThing(thing)
{
window.opener.document.forms[0].hiddentextfield.value=thing;
window.opener.__doPostBack('hiddenbutton','');
}

opener:

<input type="hidden" name="hiddentextfield" value="">
<INPUT id="hiddenbutton" style="display:none" type="button" value="" name="hiddenbutton" runat="server">

funktionen AddThing gör nu att ServerClick-eventet på hiddenbutton triggas, och då kan du passa på att lägga till i dina dropdowns, genom att "adda" ListItems.

Medlem sedan dec. 19996 522 inlägg
#10

Tack för förslaget, löste det genom att fylla kontrollerna med de värden de inte redan innehöll, fungerade bra.

Medlem sedan dec. 19996 721 inlägg
#11

Gött!

266 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)