Avatar billede Kim Neesgaard Seniormester
05. juni 2008 - 14:16 Der er 32 kommentarer og
2 løsninger

onclick="window.print() afhængig af indhold af variabel

Jeg har en knap på min side, der skriver formen ud:

<input id="Button5" type="button" value="Print Form" onclick="window.print()" />

Jeg har en variabel i min codebehind og hvis den variabel har en bestemt værdi, så må formen skrives ud, men hvis den har en anden værdi, så må formen IKKE skrives ud og brugeren skal evt. have en advarsel om dette.

Er det muligt at lave sådan en konstruktion?
Avatar billede jhe-ting Nybegynder
05. juni 2008 - 15:51 #1
Da du ikke har vist nogen kode, har jeg opdigtet en CodeBehindVar variabel samt OkToPrint

<input id="Button5" type="button" value="Print Form" onclick="if (CodeBehindVar==OkToPtint) window.print(); else alert('NoPrint reminder')/>


men

lav hellere udskriften fra koden i dit codebehind-projekt.
Avatar billede jhe-ting Nybegynder
05. juni 2008 - 15:52 #2
Kun hvis det hjalp...
Avatar billede Kim Neesgaard Seniormester
05. juni 2008 - 16:50 #3
Nu har jeg lagt følgende i codebehind:

Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
  CodeBehindVar = "OkToPrint"
End Sub

Protected Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click
  CodeBehindVar = "x"
End Sub

men jeg får hverken printboksen eller alerten frem?
Avatar billede mcnovy Nybegynder
06. juni 2008 - 03:03 #4
har du mulighed for at smide noget kode..?
det er ikke meget at arbejde med..

jeg retter lige jhe-ting's kode hvis det er den du bruger direkte..
<input id="Button5" type="button" value="Print Form" onclick="if (CodeBehindVar==OkToPtint) window.print(); else alert('NoPrint reminder')"/>

der manglede et " til sidst i din onClick..
Avatar billede mcnovy Nybegynder
06. juni 2008 - 03:33 #5
udover det, så tror jeg ikke at du kan veksle oplysninger på den måde, mellem JavaScript, og codebehind..

der tror jeg du bliver nød til at lave et hiddenfield..
og udover det, så vil koden ikke virke hvis din CodeBehindVar ikke er oprettet først,
så medmindre du opretter den andet steds, så vil koden stadig ikke køre..
idet at din Javascript vil lave en fejl, og dermed aldrig komme til hverken window.print eller alert..
Avatar billede Kim Neesgaard Seniormester
06. juni 2008 - 12:52 #6
" har jeg tilføjet.

Codebehind er oprettet først - hvad kan jeg gøre så?
Avatar billede Kim Neesgaard Seniormester
06. juni 2008 - 12:53 #7
Hvordan laver jeg en hiddenfield?
Avatar billede mcnovy Nybegynder
06. juni 2008 - 13:36 #8
det kan gøres på flere måder, men her er een af dem..

opret dette script i din <head>
<script type="text/javascript">
    function getSharedData()
    {
if (document.getElementById("sharedData").value==OkToPtint) window.print();
else alert('NoPrint reminder')
    }
  </script>

</head>

i din body, opretter du dit hiddenfield

    <asp:HiddenField ID="sharedData" runat="server" Value="Shared Data" />

og til sidst din knap.

      <asp:Button ID="btnGetData" runat="server" Text="Get Data" OnClientClick="getSharedData()" />

i din kode behind, skulle du så gerne kunne tilgå din shareddata..
og skrive til den med.
shareddata.value = "noget";
Avatar billede Kim Neesgaard Seniormester
08. juni 2008 - 14:39 #9
Det har jeg nu lavet og jeg har lavet en knap, der tildeler værdien OkToPtint (eller OkToPrint som jeg har rettet den til):

Protected Sub Button4_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button4.Click
        sharedData.Value = "OkToPrint"
End Sub

Den trykker jeg på før jeg trykker på printknappen, der kalder funktionen, men der sker ikke rigtig noget?
Avatar billede mcnovy Nybegynder
08. juni 2008 - 16:23 #10
sory.. havde lavet en lille typo.
denne linje
if (document.getElementById("sharedData").value==OkToPrint) window.print();
skal se således ud
if (document.getElementById("sharedData").value == "OkToPrint") window.print();

altså OkToPrint skal være i "", ellers laver den en javascript fejl, og derfor du ikke fik nogen popup..
Avatar billede Kim Neesgaard Seniormester
08. juni 2008 - 17:24 #11
Nu har jeg sat "" ind og siden kører helt uden fejl, men der kommer stadig hverken printboks eller popup frem? Sætter jeg værdien af sharedData.Value korrekt?
Avatar billede mcnovy Nybegynder
08. juni 2008 - 17:36 #12
jeg har lavet et lille exempel her

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TestPrint.aspx.cs" Inherits="TestPrint" %>

<!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">
    <title></title>

    <script type="text/javascript" language="javascript">
        function getSharedData() {
            if (document.getElementById("sharedData").value == "OkToPrint") window.print();
            else alert('NoPrint reminder')
        }
        function Button2_onclick() {
            document.getElementById("sharedData").value = "OkToPrint";
        }

    </script>

</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:HiddenField ID="sharedData" runat="server" Value="Shared Data" />
        <asp:Button ID="btnGetData" runat="server" Text="Get Data" OnClientClick="getSharedData()" />
    </div>
    <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
    </form>
    <p>
        <input id="Button2" type="button" value="button" onclick="return Button2_onclick()" /></p>
</body>
</html>


codebehind

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class TestPrint : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        sharedData.Value = "OkToPrint";
    }
}


selvom du evt havde skrevet noget forkert i din sharedValue,
så skulle der stadig komme en alert();
Avatar billede mcnovy Nybegynder
08. juni 2008 - 17:39 #13
Jeg lavede også en javascript knap til at sætte værdien i sharedValue,
bare for at slippe for et postback..
men ta' dig ikke at den..
det er den der hedder button2
Avatar billede mcnovy Nybegynder
08. juni 2008 - 17:46 #14
evt, så kom med noget kode, det gør det gerne lidt lettere at hjælpe..
Avatar billede Kim Neesgaard Seniormester
08. juni 2008 - 18:13 #15
Jeg kan ikke få det til at funke! Jeg sender koden herunder. Jeg skriver i VB og siden er tilknyttet en MasterPage, så body etc. er ikke med.

Tags:

<%@ Page Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="PrintOK.aspx.vb" Inherits="Javascript_PrintOK" title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

<script type="text/javascript" language="javascript">
        function getSharedData() {
            if (document.getElementById("sharedData").value == "OkToPrint") window.print();
            else alert('NoPrint reminder')
        }
        function Button2_onclick() {
            document.getElementById("sharedData").value = "OkToPrint";
        }

</script>

<asp:HiddenField ID="sharedData" runat="server" Value="Shared Data" />
<asp:Button ID="btnGetData" runat="server" Text="Get Data" OnClientClick="getSharedData()" />
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
<input id="Button2" type="button" value="button" onclick="return Button2_onclick()" />

</asp:Content>

Codebehind:

Partial Class Javascript_PrintOK
    Inherits System.Web.UI.Page

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
        sharedData.Value = "OkToPrint"
    End Sub 'Button1_Click

End Class

Det er lavet i en helt frisk .aspx, så der ikke skulle være andre ting, der påvirker.
Avatar billede mcnovy Nybegynder
08. juni 2008 - 18:49 #16
det forklare så hvorfor det ikke virker..
idet dit script ikke ligger i din <head>

det kan du evt løse ved at
1.: sætte koden ind i en .js fil..

2.: lave en ekstra contentplaceholder i din <head> (er dog ikke sikker på om det virker i alle .net versioner..

for at prøve med nummer 2 (da det er en meget praktisk metode, hvis man ønsker mulighed for at lave javascript's)

så prøv at tilføje dette mellem dine <head> </head
<asp:ContentPlaceHolder id="head" runat="server">
    </asp:ContentPlaceHolder>

og brug så denne som din PrintOK fil

<%@ Page Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="PrintOK.aspx.vb" Inherits="Javascript_PrintOK" title="Untitled Page" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">
<script type="text/javascript" language="javascript">
        function getSharedData() {
            if (document.getElementById("sharedData").value == "OkToPrint") window.print();
            else alert('NoPrint reminder')
        }
        function Button2_onclick() {
            document.getElementById("sharedData").value = "OkToPrint";
        }

</script>
</asp:Content>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">



<asp:HiddenField ID="sharedData" runat="server" Value="Shared Data" />
<asp:Button ID="btnGetData" runat="server" Text="Get Data" OnClientClick="getSharedData()" />
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
<input id="Button2" type="button" value="button" onclick="return Button2_onclick()" />

</asp:Content>
Avatar billede mcnovy Nybegynder
08. juni 2008 - 18:50 #17
rettelse
så prøv at tilføje dette mellem dine <head> </head
<asp:ContentPlaceHolder id="head" runat="server">
    </asp:ContentPlaceHolder>

det snakker jeg om din MasterPage.Master (eller hvad du kalder den)
Avatar billede mcnovy Nybegynder
08. juni 2008 - 19:09 #18
det skal selvfølgelig siges at du godt kan have hele dit javascript kode i i knap, jeg valgte bare at fravælge det for overskuelighedens skyld..

men så ville din content side komme til at se således her ud..
<%@ Page Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="PrintOK.aspx.vb" Inherits="Javascript_PrintOK" title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

<asp:HiddenField ID="sharedData" runat="server" Value="Shared Data" />
        <asp:Button ID="btnGetData" runat="server" Text="Get Data" OnClientClick=" if (document.getElementById('sharedData').value == 'OkToPrint') window.print();
            else alert('NoPrint reminder')" />
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
<input id="Button2" type="button" value="button" onclick="return Button2_onclick()" />

</asp:Content>
Avatar billede Kim Neesgaard Seniormester
09. juni 2008 - 16:19 #19
Hvis jeg sætter en ekstra contentplaceholder mellem <head> </head, så får jeg fejlen
Unrecognized tag prefix or device filter 'asp'?
Avatar billede mcnovy Nybegynder
09. juni 2008 - 16:30 #20
det kan godt være at det kun er understøttet af .net 3.5, det er jeg ikke sikker på..


men du kan jo prøve mit sidste eksempel..
det SKAL virke :)
Avatar billede Kim Neesgaard Seniormester
10. juni 2008 - 16:25 #21
Nu har jeg forsøgt at sætte kode og tags ind på en side UDEN en masterpage og så virker både printboks og alert afhængig af variablens værdi! Så det virker! Men hvordan får jeg det til at virke MED en masterpage - det har applikationen, den skal bruges i, nemlig.
Avatar billede mcnovy Nybegynder
10. juni 2008 - 16:37 #22
Kommentar: mcnovy
08/06-2008 18:49:14

den er lavet med masterpages, testet, og virker.. :)
Avatar billede Kim Neesgaard Seniormester
10. juni 2008 - 17:26 #23
Nu har jeg klippet alt over. Jeg kan dog ikke sætte en contentplaceholder mellem head for så får jeg fejl, som skrevet ovenfor. Desværre kan jeg stadig ikke få det til at virke.
Avatar billede mcnovy Nybegynder
10. juni 2008 - 17:35 #24
hov.. det var en fejl fra mig..
det var denne jeg skulle have linket til..

Kommentar: mcnovy
08/06-2008 19:09:36
Avatar billede Kim Neesgaard Seniormester
10. juni 2008 - 19:05 #25
Jeg er ked af at være besværlig, men det virker ikke for mig. Når jeg trykker på Get Data, så kan jeg meget kortvarigt se fejl udråbstegnet, men det forsnder igen og så sker der ikke mere?
Avatar billede mcnovy Nybegynder
10. juni 2008 - 19:14 #26
knappen her
<asp:Button ID="btnGetData" runat="server" Text="Get Data" OnClientClick=" if (document.getElementById('sharedData').value == 'OkToPrint') window.print();
            else alert('NoPrint reminder')" />

bliver til <asp:Button ID="btnGetData" runat="server" Text="Get Data" OnClientClick=" if (document.getElementById('sharedData').value == 'OkToPrint') window.print();
            else alert('NoPrint reminder');" />

manglede et semicolon til sidst..

men så skulle den også snart være der :)

du er skam ikke besværlig..
det er jo et sted hvor at vi skal hjælpe hinanden.. :)
Avatar billede mcnovy Nybegynder
10. juni 2008 - 19:16 #27
og kan tilføje at jeg har testet denne kode..
og det virker ihvertfald for mig..

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TestPrint.aspx.cs" Inherits="TestPrint" %>

<!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">
    <title></title>

</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:HiddenField ID="sharedData" runat="server" Value="Shared Data" />
        <asp:Button ID="btnGetData" runat="server" Text="Get Data" OnClientClick=" if (document.getElementById('sharedData').value == 'OkToPrint') window.print();
            else alert('NoPrint reminder');" />
    </div>
    <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
    </form>
    <p>
        <input id="Button2" type="button" value="button" onclick="return Button2_onclick()" /></p>
</body>
</html>

selvfølgelig skal din <page> se lige anderledes ud, men resten af koden er testet og virker..
Avatar billede Kim Neesgaard Seniormester
11. juni 2008 - 17:58 #28
Men den sidste her er uden masterpage, antager jeg?

Jeg kan desværre stadig ikke få den til at gøre noget - heller ikke med';' tilføjet.
Avatar billede Kim Neesgaard Seniormester
11. juni 2008 - 18:20 #29
Nu mener jeg at have fundet en anden måde at gøre det på!

På masterpage indsættes:

<head>
<script type="text/javascript">
    function getSharedData()
    {window.print();
    }
</script>
</head>

Og på formularen en ASP.NET knap med en OnClientClick:

<asp:Button ID="Button3" runat="server" Text="Button" OnClientClick="getSharedData()" />

Knappen gør så to ting:

1/ Gemmer oplysninger på form i database.
2/ Viser en printdialogboks, der giver adgang til at printe formularen (for den vil godt, hvis der IKKE er en if else).

På den måde opnår jeg, hvad jeg vil, nemlig at det ikke skal være muligt at udskrive formularen uden at gemme de data, der står på den.
Avatar billede mcnovy Nybegynder
11. juni 2008 - 19:01 #30
Hej..

tjaa..
havde nu bare håbet på at få det væk fra masterpage (det er sådan jeg bedst kan lide det)
men synes ikke det vil lykkes for mig..

men bare det virker for dig nu... :)
Avatar billede Kim Neesgaard Seniormester
11. juni 2008 - 19:37 #31
Ja - det er irriterende, at det ikke vil virke!

Iøvrigt en anden fordel ved 'min' løsning: funtionen kan indeholde en alert først, der fortæller brugeren, at nu skal der udskrives og ved ok til denne, dukker printdialogen op.

Lægger du et svar! Jeg havde ALDRIG fundet ud af det uden din hjælp!
Avatar billede Kim Neesgaard Seniormester
11. juni 2008 - 19:41 #32
Har du iøvrigt nogen ide om, hvorfor det er selve if-konstruktionen der gør, at det ikke virker?
Avatar billede mcnovy Nybegynder
11. juni 2008 - 20:01 #33
nej.. desværre ikke..
jeg bruger .net 3.5, og den understøtter at jeg har en contentpage til min head (hvor at jeg så kan smide min Javascript kode ind), så jeg har ikke denne slags problemer (heldigvis.. :) )
men jeg har læst lidt frem og tilbage, at der er mange der skrive selve Javascript funktionen i codebehind (altså tilføjer teksten med javascriptet via C# eller VB, i deres page_PreRender, og skriver den i headeren)
mener det er denne tutorial.
http://www.asp.net/learn/videos/video-276.aspx

denne
http://www.asp.net/learn/videos/video-275.aspx

vil nok også være guld værd for dig..
Avatar billede mcnovy Nybegynder
11. juni 2008 - 20:01 #34
og svar
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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