Announcement

Collapse
No announcement yet.

Controls bei Server.Transfer() nicht zugreifbar

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Controls bei Server.Transfer() nicht zugreifbar

    Hallo,

    ich bastle gerade eine Webapplikation bei der ich Nutzerdaten in einem Formular abfragen muss. Um es für den Nutzer überschaubar zu halten wird das Formular in mehrere Seiten unterteilt. Wurden die Daten einer Seite validiert soll es auf der nächsten Seite weiter gehen. Dafür nutze ich
    Code:
    Server.Transfer("Default2.aspx");
    allerdings habe ich dann auf der zweiten Seite das Problem, wenn sie vom Nutzer submittet wird, dass z.B. TextBox1.Text leer ist, obwohl Daten eingetragen wurden.

    Hat jemand eine Idee, wo hier das Problem liegen kann?

  • #2
    In ASP.NET gibt es zu diesem Zweck Wizard Control.

    Sonst kann man natürlich Rad neu erfinden:

    Code:
    Server.Transfer("~/Default2.aspx", 1);  // 1- bedeutet "Werte in Form beibehalten"
    
    // Datenübertragung zwischen den Seiten
    
    Page originalPage = (Page)Context.Handler;
    TextBox NewPageTextBox = (TextBox)originalPage.FindControl("OldPageTextBox");
    this.txtBox.Text = NewPageTextBox.Text;
    Zuletzt editiert von vadym voytas; 19.01.2011, 23:56.
    Bitte vergessen Sie nicht die Antwort zu bewerten. Danke.:-)

    Comment


    • #3
      Danke für den Hinweis auf das Wizard Control. Den werde ich mir defninitv noch einmal genauer anschauen, allerdings habe ich das Problem, dass bei mir noch eine komplexe Ablaufsteuerung (d.h. Äbhängigkeit von vorheringen Antworten) hinzukommt. Wie auch immer trotzdem wurmt es mich, dass es nicht so funktioniert wie ich es mir denke. Denn ich habe versucht das ganze mal etwas zu reduzieren und stoße auf einen ganz ähnlichen Effekt, wenn es sich um zwei Forms auf einer Website handelt:

      Zum einen die Default.aspx
      Code:
      <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
      
      <!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:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            <asp:Button ID="Button1" runat="server" Text="Button1" onclick="Button1_Click" />
          </div>
          </form>
          <form id="form2" runat="server" visible="False">
          <div style="font-weight: 700">
            <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
            <asp:Button ID="Button2" runat="server" Text="Button2" onclick="Button2_Click" 
              style="height: 26px" />
          </div>
          </form>
      </body>
      </html>
      Und auf der anderen Seite die Default.aspx.cs
      Code:
      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Web;
      using System.Web.UI;
      using System.Web.UI.WebControls;
      
      public partial class _Default : System.Web.UI.Page 
      {
          protected void Page_Load(object sender, EventArgs e)
          {
            if (Session["Text1"] != null)
              TextBox1.Text = Session["Text1"].ToString();
            if (Session["Text2"] != null)
              TextBox2.Text = Session["Text2"].ToString();
          }
      
          protected void Button1_Click(object sender, EventArgs e)
          {
            Session["Text1"] = TextBox1.Text;
            form2.Visible = true;
            form1.Visible = false;
          }
          protected void Button2_Click(object sender, EventArgs e)
          {
            Session["Text2"] = TextBox2.Text;
            form1.Visible = true;
            form2.Visible = false;
          }
      }
      Der komische Effekt den ich hier feststelle ist, dass ab der zweiten Runde die Eingabe nicht mehr richtig vom Client ankommt, sondern mit dem Initialisierungswert übereinstimmt.

      Comment


      • #4
        Ich habe die Lösung gerade gefunden. Ich war mir des Action-Modells nicht ganz bewusst. Das Problem ist, dass ich im Page_Load darauf achten muss, ob es sich um ein PostBack (IsPostBack) handelt, da ja auch beim PostBack zunächst erst die Page_Load Action ausgelöst bzw. aufgerufen wird.

        Comment


        • #5
          Alternative Multiview

          Hallo,

          vieleicht ein bischen spät. Wenn die Benutzersteuerung nicht linear abgebildet werden kann dann bieten sich auch Multiview an. In Multiview ist es deiner Logik überlassen zu welcher View du springst. Für komplexere Aufgabenstellungen können auch mehrere Multiviews kombiniert werden.

          Bei der Benutzung von mehreren Seite(seite1.aspx, etc) besteht immer die Möglichkeit das der Nutzer "Quer" einsteigt. Statt wie gewünscht Seite 1, dann Seite2, dann Seite 3, etc. steigt der User bei Seite2 ein, entsprechend müsstes du auf Seite 2 zuerst prüfen, ob die Seite 1 entsprechend aufgerufen wurde, etc.

          Mfg, Franz

          Comment


          • #6
            Danke für den Hinweise, inzwischen habe ich es aber doch über einen Wizard lösen können, wenn man in der Page_Init() noch die WizardSteps hinzufügt, die man braucht geht es sogar.

            Allerdings quäle ich mich jetzt damit rum, wie man bei der Nutzung von CustomValidatoren dafür sorgen kann, dass nicht zur nächsten Seite bzw. WizardStep gewechselt wird, wenn ein Fehler auftritt. Bisher ist mir dabei nur folgende Lösung eingefallen:
            Code:
            <%@ Page Language="C#" %>
            
            <script runat="server">
                protected void Page_Load(object sender, EventArgs e)
                {
                  if (IsPostBack)
                  {
                    Page.Validate();
                    if (Page.IsValid)
                      wizTest.ActiveStepIndex = 0;
                  }
                }
            
                protected void validate(object Sender, ServerValidateEventArgs Args)
                {
                  Args.IsValid = txtTest.Text == "test";
                }
            </script>
            
            <!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">
                <asp:Wizard ID="wizTest" runat="server" >
                  <WizardSteps>
                    <asp:WizardStep ID="Step1" runat="server" StepType="Step">
                    <asp:TextBox ID="txtTest" runat="server" />
                    <asp:CustomValidator ID="valTest" runat="server" ErrorMessage="Fehler!!!" OnServerValidate="validate" />
                    </asp:WizardStep>
                    <asp:WizardStep ID="Step2" runat="server" StepType="Step">
                    </asp:WizardStep>
                  </WizardSteps>    
                </asp:Wizard>
                </form>
            </body>
            </html>
            Hat da noch jemand eine bessere Idee?

            Comment


            • #7
              Hallo,

              falls irgendwer mal ein ähnliches Problem haben sollte, nachdem ich es erst einmal ignoriert habe, habe ich nun noch eine Lösung gefunden unter http://forums.asp.net/t/1021999.aspx. Das Grundproblem ist also, dass die serverseitige Funktion des CustomValidator zwar aufgerufen wird, aber vom Wizard keine Page.IsValid - Abfrage erfolgt. Lösung ist daher folgende:
              Code:
              <script>
                protected void clickedNext(object Sender, WizardNavigationEventArgs Args)
                {
                  if (!Page.IsValid)
                    Args.Cancel = true;
                }
              </sript>
              
              <asp:Wizard ID="wizControl" ... 
              OnNextButtonClick="clickedNext" OnFinishButtonClick="clickedNext" >

              Comment

              Working...
              X