Pete: ASP.NET -> Aus Variable in Sourcedatei zugreifen

Hallo
In meiner Default.aspx habe ich einen RequiredFieldValidator. Darin möchte ich die ErrorMessage auf einen Wert setzen, der in der Konstante ERROR_VALIDATION_REQUIRED_FIELD in Default.aspx.cs liegt. Wie komme ich an diesen Wert? Ich weiss das hier nicht DAS ASP Forum ist, aber sicher kann mir trotzdem jemand helfen.

Cheers

  1. Yerf!

    In meiner Default.aspx habe ich einen RequiredFieldValidator. Darin möchte ich die ErrorMessage auf einen Wert setzen, der in der Konstante ERROR_VALIDATION_REQUIRED_FIELD in Default.aspx.cs liegt. Wie komme ich an diesen Wert?

    Einfach drauf zugreifen. Zur Laufzeit ist beides nur ein Objekt. Die aspx ist eine abgeleitete Klasse der aspx.cs. Das heist, man kann von der aspx aus auf alles der Codedatei zugreifen, was protected oder public ist. Umgekehrt werden normalerweise die Controls als Protected Member in der Codedatei deklariert, so das man von dort aus darauf zugreifen kann.

    Meine Lösung wäre es in Load (oder OnInit) die Eigenschaft des Controls entsprechend zu setzen.

    Alternativ könnte man in der aspx ein Stück Code einfügen, das die Konstante dem Control zuweist. Dies etzt vorraus, das die Konstante als Protected oder Public definiert wurde. Ich selbst aber vermeide Code in der aspx-Datei und Packe alles in die aspx.cs

    Gruß,

    Harlequin

    --
    <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
    1. Einfach drauf zugreifen. Zur Laufzeit ist beides nur ein Objekt. Die aspx ist eine abgeleitete Klasse der aspx.cs.

      Hehe ja so was ähnliches hab ich mir gedacht. Aber wie greife ich (syntaxmässig) darauf zu?
      ErrorMessage = ?

      1. ErrorMessage = ?

        Wie greifst du denn auf das Property "ErrorMessage" deines RequiredFieldValidators zu?

        Für gewöhnlich mit: Me (VB) oder this (C#) plus der instanzvariablen des Controls von innerhalb derselben Klasse

        Also, z.b.  this.myValidator.ErrorMessage

        Auf const Konstanten greifst du normalerweise mit dem Typennamen der umgebenden Klasse und dem Konstantennamen zu, z.b.

        public class MeineKonstantenKlasse
        {
          public const string MeineKonstante = "is wurst";
        }

        MeineKonstantenKlasse.MeineKonstante

        Deine ASPX Seite ist eine Klasse, die u.a. in der code-behind Datei .aspx.cs definiert ist, darin wirst du auch deine Konstante deklariert haben, richtig?

        Du solltest die Zuweisung der ErrorMessage in der Methode "InitializeComponent" bzw. besser in einer eigenen Methode vornehmen. Ausserdem empfiehlt sich die Verwendung von Resourcendateien bzw. Resource Satellite Assemblies anstelle von Konstanten.

        Ciao, Frank

        1. Hi

          Deine ASPX Seite ist eine Klasse, die u.a. in der code-behind Datei .aspx.cs definiert ist, darin wirst du auch deine Konstante deklariert haben, richtig?

          Ja genaz

          Du solltest die Zuweisung der ErrorMessage in der Methode "InitializeComponent" bzw. besser in einer eigenen Methode vornehmen. Ausserdem empfiehlt sich die Verwendung von Resourcendateien bzw. Resource Satellite Assemblies anstelle von Konstanten.

          Ciao, Frank

          In Java zum kenne ich Resourcedateien im Zusammenhang mit zbsp. Mehrsprachigkeit, dazu habe ich in diesem Fall aber keine Ambitionen. Was für Vorteile hätte es Resourcedateien einzusetzen?

          Das ich in der Code-behind-Datei auf die Konstante zugreifen kann hab ich mir im ersten Moment gar nicht überlegt, ich hätte es gerne innerhalb der aspx-datei im Tag-Attribut gemacht. Aber ich vermute das ist nicht möglich?

          1. Hallo,

            In Java zum kenne ich Resourcedateien im Zusammenhang mit zbsp.
            Mehrsprachigkeit, dazu habe ich in diesem Fall aber keine Ambitionen.
            Was für Vorteile hätte es Resourcedateien einzusetzen?

            Resourcedateien koennen sehr gut von Web-Designern oder Content-Pflegern
            bearbeitet werden, da sie selbst nach dem Deployment noch editiert werden
            koennen. Das heisst, der Programmierer ist dann optimaler Weise nicht mehr
            fuer die Texte verantwortlich. Des weiteren, in Hinsicht auf Multilingualitaet,
            koennen sie sehr gut Externen zu Verfuegung gestellt werden, um die
            Uebersetzungen zu implmentieren.

            Das ich in der Code-behind-Datei auf die Konstante zugreifen kann hab ich
            mir im ersten Moment gar nicht überlegt, ich hätte es gerne innerhalb der
            aspx-datei im Tag-Attribut gemacht. Aber ich vermute das ist nicht möglich?

            Habe gerade kein VS auf meinem Rechner, aber in der asp-Datei sollten
            eigentlich auch saemtliche Attribute/Properties setzbar sein, welche sich auch
            aus der Code-Behind setzen lassen koennen. Sprich, es sollte eigentlich eine
            Property geben, die fuer den anzuzeigenden Text verantwortlich ist. Hast du es
            mal mit "Text" oder "ErrorMessage" o.ae. probiert?
            By the way ist es eigentlich gang und gebe, Properties aus der Code-Behind
            heraus zu setzen.

            Mit freundlichen Gruessen,
            Sympathizer

            --
            "Was ist ist, was nicht ist ist moeglich"
            1. Habe gerade kein VS auf meinem Rechner, aber in der asp-Datei sollten
              eigentlich auch saemtliche Attribute/Properties setzbar sein, welche sich auch
              aus der Code-Behind setzen lassen koennen. Sprich, es sollte eigentlich eine
              Property geben, die fuer den anzuzeigenden Text verantwortlich ist. Hast

              Ja eben, im asp bereich habe ich etwas a là
              <asp:RequiredFieldValidator ErrorMessage="HIER GERNE DER WERT DER KONSTANTE"...

              Entweder habe ich deine Antwort oder du meine Frage nicht verstanden =)

              1. Yerf!

                Ja eben, im asp bereich habe ich etwas a là
                <asp:RequiredFieldValidator ErrorMessage="HIER GERNE DER WERT DER KONSTANTE"...

                Entweder habe ich deine Antwort oder du meine Frage nicht verstanden =)

                Nein, er versucht dir nur klarzumachen, dass das der falsche Weg ist (wie ich auch schon erwähnt hatte). Programmcode gehört ind die CodeBehind-Klasse.

                Wenns aber unbedingt sein muss könntest du probieren, ob die <%=KONSTANTE %> Schreibweise funktioniert. (Zum ausgeben von Text auf jeden Fall, aber ob das in Attributen von ASP-Controls auch klappt kann ich nicht sagen.)

                Aber schön ist das nicht... das erinnert eher an Uralt-ASP oder PHP ;-)

                Wenn du dir selbst einen Gefallen tun willst, dann packst du solche Initialisieruungen alle zusammen in eine Funktion im CodeBehind.

                Gruß,

                Harlequin

                --
                <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
                1. Yerf!

                  Aber schön ist das nicht... das erinnert eher an Uralt-ASP oder PHP ;-)

                  Wenn du dir selbst einen Gefallen tun willst, dann packst du solche Initialisieruungen alle zusammen in eine Funktion im CodeBehind.

                  Gruß,

                  Harlequin

                  Jupp das werde ich machen, ich komme tatsächlich vom klassischen ASP her, und hab mir daher gar nicht unbedingt überlegt das in der Code-Klasse zu handeln. Vielen Dank

                  Cheers Pete