Avatar billede pumpin Nybegynder
03. september 2005 - 16:12 Der er 22 kommentarer og
1 løsning

hvor er include ?

heysan eksperter!

jeg har endlig fået nosset mig sammen til at gå i gang med ASP.NET og C# efter at ha' sværvet til PHP i lang tid :)

nu sider jeg så og skal lave et lidt størrer site og undre mig over hvor er min include("fil.php"); blevet af ?

jeg skal bruge det til mine links så når man trykker på dem includer de en fil i mit "main" felt

jeg ville gøre sådan her i php:

<?php if($_REQUEST['inc']) {include($_REQUEST['inc']);} else { include('velkommen.php'); } ?>

og så stikke mit link:
<a href="?inc=tralala.php">tralala</a>

hvad gør man i ASP.NET ??
  Venlig Hilsen
      Troels
Avatar billede softspot Forsker
03. september 2005 - 16:50 #1
Måden ville nok være at lave en user control som man så sætter ind (enten statisk eller dynamisk i f.eks. en placeholder eller noget i den stil).
Avatar billede pumpin Nybegynder
03. september 2005 - 18:36 #2
og en placeholder er ?
Avatar billede jokkejensen Novice
03. september 2005 - 18:37 #3
Det er godt nok "meget" grimt.. men jeg mener Server.Execute erstatter dit php include... Men så kan du ikke bruge postback :(
Avatar billede softspot Forsker
03. september 2005 - 19:12 #4
Der findes en server control som hedder Placeholder (asp:Placeholder). Det er en slags reservation af en plads i dit HTML-dokument, som kan fyldes ud på et senere tidspunkt. Kontrollen har ligesom page-objektet en Controls-collection hvori man kan kalde Add-metoden med en anden server kontrol, f.eks. en du selv har lavet...
Avatar billede pumpin Nybegynder
03. september 2005 - 20:21 #5
oki cool nok.. har lavet en placeholder.  men hvordan binder jeg så den til en given side som kun indenholder mit main area ( somreglt en enkelt tabel)

og hvordan skal jeg switche visible på dem via et tekst link ?
Avatar billede softspot Forsker
03. september 2005 - 20:54 #6
En hurtig løsning (på kort sigt) er at poste tilbage til den samme form og så aflæse hvilket link der blev klikket på og tage de fornødne forholdsregler (dvs. hvilken kontrol skal vises nu osv.). Dette koncept bliver nok svært at gennemføre, da du nok løber ind i nogle situationer hvor postback til den samme side vil være uhensigtsmæssig. Desuden risikerer du at ende med en stor mainform codebehind hvis du ikke planlægger det godt.

Anyway!  Jeg har f.eks. denne mainform (default.aspx):

<%@ Page language="c#" Codebehind="default.aspx.cs" AutoEventWireup="false" Inherits="Sandkassen.CSSPages._default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<HTML lang="en">
<HEAD>
  <title>default</title>
  <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
  <meta name="CODE_LANGUAGE" Content="C#">
  <meta name="vs_defaultClientScript" content="JavaScript">
  <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
  <link rel="stylesheet" type="text/css" media="screen,projection" href="screen.css">
</HEAD>
<body MS_POSITIONING="GridLayout">
  <form id="Form1" method="post" runat="server">
    <div id="page-outer">
      <div id="page-inner">
        <asp:PlaceHolder ID="phContent" Runat="server" />
      </div>
    </div>
  </form>
</body>
</HTML>

og denne codebehind (default.aspx.cs):

namespace Sandkassen.CSSPages
{
  /// <summary>
  /// Summary description for _default.
  /// </summary>
  public class _default : System.Web.UI.Page
  {
    protected System.Web.UI.WebControls.PlaceHolder phContent;

    private void Page_Load(object sender, System.EventArgs e)
    {
      string mode = Convert.ToString(Request.QueryString["m"]);

      switch(mode)
      {
        case "gal":
          Control ctlGal = Page.LoadControl("/Sandkassen/CssPages/gallery.ascx");
          if(ctlGal != null)
            phContent.Controls.Add(ctlGal);
          break;

        case "img":
          Control ctlImg = Page.LoadControl("/Sandkassen/CssPages/galleryImage.ascx");
          if(ctlImg != null)
            phContent.Controls.Add(ctlImg);
          break;

        default:
          Control ctlGal2 = Page.LoadControl("/Sandkassen/CssPages/gallery.ascx");
          if(ctlGal2 != null)
            phContent.Controls.Add(ctlGal2);
          break;
      }
    }

    #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
      //
      // CODEGEN: This call is required by the ASP.NET Web Form Designer.
      //
      InitializeComponent();
      base.OnInit(e);
    }
       
    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {   
      this.Load += new System.EventHandler(this.Page_Load);

    }
    #endregion
  }
}


og så har jeg nogle user controls som ligger i den sti du kan se (der hvor jeg kalder Page.LoadControl).
Avatar billede pumpin Nybegynder
04. september 2005 - 10:42 #7
jeg har næsten løste det.. jeg har bare et problem nu.. jeg loader mine userControls ind ved at lave en link knap med denne kode:

PlaceHolder1.Controls.Add(LoadControl("WebUserControl2.ascx"));

og det virker super nice.. men men, hvis jeg har en knap i min WebUserControl.ascx som foreks. benytter denne kode TextBox1.Text = TextBox2.Text; ( meget simplt )
så gør den ikke det som jeg ber den om den postbacker siden istedet for at udføre min komando.. hvilkent resulter i at min usercontrol ikke er loadet efter postback :( hvad gør jeg
Avatar billede softspot Forsker
04. september 2005 - 11:59 #8
Hvad mener du med at den poster tilbage (det skal den hvis du laver en server-knap)? Hvad er det du gerne vil? Har du mulighed for at vise noget kode?
Avatar billede pumpin Nybegynder
05. september 2005 - 17:53 #9
undskyld jeg ikke lige har svaret har været udenbys..

jeg mener at når jeg bruger loadControl på en knap så henter den min usercontrol ind men hvis den usercontrol inden holder en submit knap. når jeg så trykker på den så booom står jeg på min index side uden den usercontrol som var include for 1 sek siden...

jeg bruger denne kode til at loade den ind med protected void LinkButton1_Click(object sender, EventArgs e)
    {
        PlaceHolder1.Controls.Add(LoadControl("WebUserControl.ascx"));
    }
    protected void LinkButton2_Click(object sender, EventArgs e)
    {
        PlaceHolder1.Controls.Add(LoadControl("WebUserControl2.ascx"));
    }
Avatar billede pumpin Nybegynder
05. september 2005 - 17:56 #10
det kode jeg har i min usercontrol er bare noget slam kode men here it goes:

<table width="500px" border="2px">
    <tr>
        <td>kjdskjflksdjf kdsjf klsdjfklsd jfklsdj flksdj fsd f
        </td>
        <td>sd fsdf sdf sdf s fsdf sdf sdf sdf sd fsdf sdf sd fsdf ds fsd fsd f
        </td>
        <td>
        </td>
    </tr>
    <tr>
        <td>
        </td>
        <td>
        </td>
        <td>
        </td>
    </tr>
    <tr>
        <td>sd fsd fsdf sdfd fdfk j jijdkfsdjfljiifjkhdkfjiaurwijfd df kdhs ghsdjhg jsdhgjdhsgjhwokdskd sdksjd shuifhsafk haskfg askfj
        </td>
        <td> sdfsd fsdf sdf sd fsdf
        </td>
        <td>sd fsdf sdf sdf sd fsdf sdf sdf sdf sd fsd fsd f
        </td>
    </tr>
</table>
<asp:Button ID="Button1" runat="server" Text="Button" />

når jeg trykker på min Button1 så "fjerne" den min usercontrol
Avatar billede softspot Forsker
05. september 2005 - 17:58 #11
Det er fordi du skal genindlæse dynamisk indlæste kontroller hver gang siden genereres på serveren (altså ved hvert postback). Det er den eneste måde serveren kan vide hvad der skal være på siden, da den jo ikke har noget andet at gå efter...
Avatar billede pumpin Nybegynder
05. september 2005 - 19:35 #12
nogen ide til hvordan jeg gør det
Avatar billede softspot Forsker
05. september 2005 - 20:51 #13
Ja, du burde kunne klare det i det event der hedder Page_Load...
Avatar billede softspot Forsker
05. september 2005 - 20:55 #14
...men det kan da godt være du skal holde en eller anden form for tilstand, f.eks. i ViewState - som kan refereres via Page.ViewState. Bemærk dog at ViewState kun er interessant i det tilfælde du poster tilbage til samme form, idet den ligger som et skjult felt i formularen på klienten...
Avatar billede pumpin Nybegynder
05. september 2005 - 21:09 #15
hmm noget i dur med at oprette en variabel ViewState og så i page loade tjekke om den var lig med noget og så sætte det ind i en loadcontrol ?
Avatar billede pumpin Nybegynder
05. september 2005 - 21:27 #16
har det er på min knap:

protected void Button1_Click(object sender, EventArgs e)
    {
        PlaceHolder1.Controls.Add(LoadControl("WebUserControl2.ascx"));
        ViewState.Add("site", "WebUserControl2.ascx");

    }

og det her i min page_load
if (IsPostBack == true)
        {
            string SiteInfo = ViewState["site"].ToString();
            PlaceHolder1.Controls.Add(LoadControl(SiteInfo));
        }
Avatar billede pumpin Nybegynder
05. september 2005 - 21:32 #17
virker stadig ikke helt.. den kommer med den her fejl når jeg trykker på knappen:

Object reference not set to an instance of an object
Avatar billede softspot Forsker
05. september 2005 - 21:43 #18
Hmmm... jeg spekulerer på om det ikke er at gabe over en for stor mundfuld her i starten af din .NET-karriere, at skulle håndtere denne slags tilstandshåndtering. Mon ikke du ville være hjulpet ved blot at lave en usercontrol, som indeholder dine links og så bare (i designeren i Visual Studio.NET) trække den usercontrol fra solution explorer over i formularen der hvor den skal ligge. Det burde i det mindste give dig nogenlunde samme funktionalitet som en include med samme kode i...

Jeg tror vi begge kommer til at køre surt i dette projekt. Jeg har selv lavet en wizard på et tidspunkt, og det havde jeg mange problemer med. Den baserede sig nogenlunde på det koncept du snakker om. Det kræver bare en god forståelse af hvordan events bliver kastet rundt i systemet, og jeg fornemmer at du skal have et enkelt projekt ind under frakken inden du er kommet dertil (al respekt for hvad du formår, men jeg synes selv det har været en sej process, sååeh...). Hvad synes du om den betragtning...?
Avatar billede pumpin Nybegynder
05. september 2005 - 22:07 #19
fair nok.. havede selv overvejet at lave det om til at mine statiske objekter blev include.. men som sagt er det fordi jeg kan skyde det afsted i PHP men .Net er sku lidt mere kryptisk :)

det er bare dumt de ikke har en metode som kan include det er nemlig ginialt at rode med og dejlige nemt at updatere :(

fyr et svar!
Avatar billede softspot Forsker
05. september 2005 - 22:36 #20
.NET er ret komplekst at komme igang med (det er min oplevelse), men jeg er sikker på at når først du får det ind under huden, så vil du opleve at det er meget fleksibelt. Desuden er integrationen til det underliggende system væsentlig bedre end i mange script-sprog, som f.eks. ASP, hvis der skulle være behov for mere avancerede features...

Anyway! Hvis du skal studere eventmodellen i ASP.NET lidt nærmere kan du evt. starte med kigge på flg. link:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/aspnet-pageobjectmodel.asp

Måske denne kan hjælpe dig på vej til at løse dit problem:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/aspnet-simulatinginclude.asp?frame=true
Avatar billede pumpin Nybegynder
07. september 2005 - 18:13 #21
tak for hjælpen soft..

der er lige en sidste ting.. hehe sry total offtopic men fuck det!

jeg sider PT med visual studio 2005 beta og kæmper mit livs hårdeste kamp siden hello world i php :D

jeg har en kammerat som siger at jeg skal væne mig til at bruge det SQLDataSource som ligger i VS_2005 ( det man trækker ind ).. og en anden ven som siger nej nej du skal kode det hele i hånden (OleDbConnection = new Ole..... )

min egen holdning er at håndkode er godt men det bliver jo meget mere PHP / ASP aktigt 5 DB connections på samme side ( godtnok 80% copy/paste ) men er det ikek feder at det ligger som objekter

håber du forstår mit Spørgsmål da det virkelig er stort problem for mig fordi at det ligesom bestemmer hvad jeg skal bruge de næste par uger på at dygtig gøre mig indenfor
Avatar billede softspot Forsker
07. september 2005 - 18:24 #22
Jeg tror det er et holdningsspørgsmål, hvad du synes bedst om at bruge. De fleste gange er det sikkert fint nok at bruge de værktøjer som er indbygget i udviklingsmiljøet, men til tider løser de bare ikke opgaven godt nok. Til at starte med vil jeg da anbefale at du bruger alle de hjælpemidler du kan, og så koncentrere dig om de områder hvor udviklingsmiljøet ikke hjælper dig så meget (f.eks. lave en fornuftig opbygning af koden, så dine programmer ikke bruger flere resurser end nødvendigt og at det er let at vedligeholde og overskue når du kommer tilbage til det om 3 eller 6 mdr.).
Avatar billede softspot Forsker
07. september 2005 - 19:25 #23
Tak for point :)
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