2009-06-11 18 views
-1

ist es möglich, mit einem Klick auf eine Schaltfläche eine völlig andere Form auf der gleichen ASPX-Seite anzuzeigen? Bitte beachten Sie, dass obwohl ich Erfahrung mit vb.net habe, habe ich fast keine mit asp.net. ich danke Ihnen sehr für Ihre Antwortenmehrere Formulare in asp.net

+0

Jetzt, da ich darüber nachdenke, brauchen wir ein wenig mehr Details mit der Frage. Es gibt eine Reihe von verschiedenen Möglichkeiten, dies basierend auf den gegebenen Informationen zu tun. –

+0

Ich denke, du musst klarstellen, was du mit form meinst. Wenn Sie Form wie im Formular-Eintrag meinen, dann wird so etwas wie das Multiview-Steuerelement gut funktionieren. Http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.multiview.aspx – RichardOD

Antwort

1

Ich würde verwenden und in Ihrem Code hinter, laden Sie die Seite und legen Sie es dann in den Platzhalter. Und dann verstecken Sie das alte Formular mit Javascript. Die Idee, die der andere gesagt hat, würde auch funktionieren, aber ich mag es, den Platzhalter selbst zu benutzen.

Ich denke, es ist alles wirklich bestimmt, was Sie mit den Formularen tun wollen und wie schlecht Sie den Code für das andere Formular auf der Seite wollen, oder nicht.

1

Wenn ich verstehe, was Sie brauchen, ist, auf dem Click-Ereignis:

response.redirect „newpage.aspx“

+0

ja vielleicht ist es das , aber gibt es eine Möglichkeit, dies zu tun, ohne auf eine andere Seite umzuleiten? –

+1

Server.Transfer? Das macht technisch keine Umleitung. – RichardOD

1

jeder der Formen auf der gleichen Seite erstellen , eine mit visible = true und die andere sichtbar = false, und wenn der Benutzer auf die entsprechende Schaltfläche klickt, wechseln Sie die Sichtbarkeiten.

<form id="Form1" runat="server" visible="true"> 
<div> 
    <asp:Button ID="Button1" runat="server" Text="Show Form 2" onclick="Button1_Click" /> 
</div> 
</form> 

<form id="Form2" runat="server" visible="false"> 
<div> 
    <asp:Button ID="Button2" runat="server" Text="Show Form 1" onclick="Button2_Click" /> 
</div> 
</form> 

Und in der Code-behind:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    this.form2.Visible = true; 
    this.form1.Visible = false; 
} 

protected void Button2_Click(object sender, EventArgs e) 
{ 
    this.form2.Visible = false; 
    this.form1.Visible = true; 
} 
+0

heißt es Fehler 'Button2_Click' ist kein Mitglied von 'ASP.default_aspx'. –

+0

erhalten Sie den gleichen Fehler? –

+0

Vergewissern Sie sich, dass das onclick-Attribut richtig eingestellt ist und dass der Button2_Click im Code dahinter existiert. Dies sind die offensichtlichsten Ursachen für dieses Problem. –

1

Sie es mit CSS/Javascript tun könnte, hier ist das, was ich zuerst tun würde:

1) Code auf zwei Formen, legen Sie sie in einem separaten divs 2) mit CSS verstecken ein div beim Laden der Seite 3) dann platzieren Sie eine Schaltfläche auf der Seite, in der Onlick-Schaltfläche Ereignis zeigen das zweite Formular und verstecken Sie das erste.

Stellen Sie sicher, dass Sie nur ein Formular-Tag haben, aber 2 Divs darin, die Sie verstecken/einblenden. Beachten Sie, dass das Formular nur an seine eigene Seite gesendet werden kann, das ist asp.net.

in Ihrem HTML:

<form runat="server" id="myForm"> 

<div id="myForm1"> 
<! -- form 1 code goes here -- !> 
</div> 

<div id="myForm2"> 
<! -- form 2 code goes here -- !> 
</div> 

<input type="button" onclick="toggleVisibility();" /> 

</form> 

Dann in Ihrem CSS

#myForm1 { 
display: none; 
} 

Dann ToggleVisibility() wird das Attribut der divs Anzeige ändern.

1

Wahrscheinlich nicht die meisten "Ajaxy" -Lösung, aber Sie könnten einen iframe verwenden, mit der Src auf den Speicherort der Formulare festgelegt.

1

Es ist NICHT erlaubt, mehr als 1 Formular runat = "Server" auf einer asp.net-Seite zu haben. Was Sie tun könnten, ist die Erstellung von zwei Panels auf Ihrer Seite, wobei die Visible-Eigenschaft auf "false" gesetzt ist. Wenn Sie dann im Ereignishandler auf eine Schaltfläche klicken, legen Sie die Visisble-Eigenschaft auf true fest, während Sie die andere 1 auf false festlegen. Wickeln Sie das Panel in ein UpdatePanel, um das Postback loszuwerden.

<asp:UpdatePanel><ContentTemplate> 
<asp:Panel ID="pnl1" runat="server"> 
    <asp:Button OnClick="Button_CLick" /> 
</asp:Panel> 
<asp:Panel ID="pnl2" runat="server" Visible="false"> 
</asp:Panel></ContentTemplate></asp:UpdatePanel> 

der Code in dem Button_Click Handler würde dann pnl1.Visible = false sein; pnl2.Visible = wahr;

+0

Wirklich? Was erlaubt es nicht? Weil ich das gerade auf meinem lokalen Rechner ausprobiert habe und es hat gut funktioniert. –

+0

Was, das ist seltsam, es hat nie funktioniert (deshalb habe ich es nie mehr versucht). ASP.NET wäre nicht in der Lage zu unterscheiden, in welcher Form es ist. Page.Form würde zum Beispiel nicht mehr funktionieren. – Colin

+1

Sie können nur ein Formular mit dem runat-Attribut VISIBLE gleichzeitig haben. Siehe http://msdn.microsoft.com/en-ca/magazine/cc163736.aspx – sarsnake

1

Sie sollten sich der MultiView-Steuerung von ASP.NET bewusst sein. Es erfordert ein Postback zum Ändern der Ansichten, und es ist ein wenig schwer auf ViewState, aber es ist eine Option zu berücksichtigen.

1

Nun, es gibt mehrere Möglichkeiten, die ich vermute. Wenn Sie TekBlues austippen, können Sie einen Server machen. Übertragen Sie "yourpage.aspx". Sie können dann mit der PreviousPage-Eigenschaft Daten von der alten Seite abrufen.

Sie können Benutzersteuerelemente und einen Platzhalter auf der Hauptseite verwenden. Natürlich enthält dynamisch geladene Steuerelemente zusätzliche Komplexität.

Sie könnten ein MultiView-Steuerelement verwenden. Asp.Net behält alle vars für Sie bei. Nützlich für den schnellen und schmutzigen.

Dies sind jedoch alle Webform-Lösungen. Wenn Sie nach einer AJAX-Lösung suchen, müssen Sie möglicherweise weiter nach Antworten suchen.

1

Verwenden Sie AJAX, um den Inhalt einer anderen Seite auf dieselbe Seite zu laden.

Verwenden Sie Response.Redirect oder Server.Transfer, um zur nächsten Seite zu wechseln.