2016-07-14 10 views
0

私はC#.NETのプロジェクトで、私には.aspxファイルに1つのフォームのみを許可しています。C#.NETでフォームアクションをコードで変更するにはどうすればよいですか?

<form id="form1" runat="server" action="#1"> 

メソッドのC#コードでフォームアクションを変更するにはどうすればよいですか? 私はこれを試してみました:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    form1.Action = "#2"; 
} 

が、それは動作しませんでした。事前のおかげで...

+0

あなたは何をしたいのですか?おそらく[CrossPage posting](https://msdn.microsoft.com/en-us/library/ms178139.aspx)が実際に必要なものです。 –

+0

これは動作する方法ではありません。 asp.netを使用すると、ページ上のコントロールでViewStateを元に戻すために、元のページにポストバックする予定です。別のページにポストバックすると、ViewStateはその「他の」ページに意味をなさないでしょう。 –

+0

そのボタンのOnClickハンドラでResponse.Redirectを発行できます。 –

答えて

0

(それは新しく理解の質問への答えだからトップにこれを移動する。これは、フォームのアクションを変更する方法はありませんが、複数のフォームを持っているか。)

あなたがしたい場合すでにサーバフォームを持っているページ上のサーバフォーム、そしておそらくその2番目の "フォーム"はUser Controlでなければなりません。そうすることで、ホスト・ページのサーバー・フォーム内に位置しますが、独自のフォームは必要ありません。また、自己完結型で、ポストバックを処理する際に必要なロジックを含めることができます。

ここでは簡単なユーザーコントロールの例を示します。 Add> New Item> Web> Webフォームユーザーコントロールから作成できます。

<%@ Control Language="C#" AutoEventWireup="true" 
    CodeBehind="OtherForm.ascx.cs" Inherits="WebApplication1.OtherForm" %> 
<label for="<% = OtherFormTextInput.ClientID %>"> 
    This is some other form on the same page 
</label> 
<asp:TextBox runat="server" ID="OtherFormTextInput"></asp:TextBox> 
<asp:Button runat="server" ID="Submit" Text="Submit this other form"/> 

.aspxページのようですが、フォームはありません。 .aspxページのように、他のサーバーコントロールと対話できる独自のコードを引き続き持つことができます。

は、その後、あなたの「メイン」ページに、そのコントロールを追加します:あなたが1つのページに2つの形式が入れている場合ということ、それは可能性がありますので

<%@ Page Language="C#" AutoEventWireup="true" 
    CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %> 

<!-- Register the user control --> 
<%@ Register TagPrefix="uc" TagName="other" Src="~/OtherForm.ascx" %> 
<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <!-- This form has its own stuff, but also contains the "other" form. --> 
     <uc:other runat="server" ID="TheOtherForm"></uc:other> 

    </form> 
</body> 
</html> 

を私は(まだ動作します)パネルを使用しての上にこれをお勧めしますセカンダリフォームを別のページに移動したり、再利用したりしたいと思うかもしれません。この手法は、完全に自己完結型に保ちます。そのコードビハインドは、.aspxページと同じファイルにありません。これを必要な数のページに配置することができます。


元々理解されていた質問に対処するオリジナルの「リテラル」回答。

runat="server"フォームは、ASP.NETがポストバック時にページとそのサーバーコントロールと対話できるようにする目的で完全に存在します。それはウェブフォームの仕組みの中心です。アクションを変更した場合、技術的にはWebフォームのページではありません。

これは問題ありません(私はウェブフォームが嫌いです)が、奇妙な動作につながる可能性があります。ポストバックをトリガーするコントロールがある場合、通常は同じページで処理され、ユーザーは早急に更新を表示します。今、彼らは別のページに送られるかもしれません。

フォームを完全に削除して独自のフォームを追加しただけの場合はどうなりますか?その後、.aspxページはちょうど.htmlページのように動作します。

免責事項をすべて追加した理由について、JavaScriptを使用してアクションを変更することができます。ここにサンプルがあります:

<%@ Page Language="C#" AutoEventWireup="true" 
    CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server" ClientIDMode="Static"> 
     <asp:Button runat="server" text="Causes postback"/> 
     <asp:CheckBox runat="server" AutoPostBack="True"/> 
    </form> 

    <script> 
     document.getElementById("form1").action = "http://stackoverflow.com"; 
    </script> 
</body> 
</html> 

フォームの動作を変更できないブラウザもあります。

私はチェックボックスをクリックして別のページにリダイレクトされる可能性がある奇妙な副作用を表示するために、ちょうど面白い(私は本当に退屈している)チェックボックスを置いています。

0

あなたの質問に基づいて質問します。 asp:Panelコントロールがあなたを助けることができます。

非常にラフな例

ASPX:

<form id="form1" runat="server"> 
    <asp:Panel id="Form1" runat="server"> 
     <!-- Form 1 Stuff -- > 
     <asp:Button ID="Button1" runat="server" Text="Submit" 
      OnClick="Button1_Click" /> 
    </panel> 
    <asp:Panel id="Form2" runat="server" Visible="false"> 
     <!-- Form 2 Stuff -- > 
     <asp:Button ID="Button2" runat="server" Text="Submit" 
      OnClick="Button2_Click" /> 
    </panel> 
</form> 

C#

protected void Button1_Click(object sender, EventArgs e) 
{ 
    //HIde "Form"1 
    Form1.Visible = false; 
    //Show "Form"2 
    Form2.Visible = true; 
    //Do other stuff 
} 

protected void Button2_Click(object sender, EventArgs e) 
{ 
    //Do Final Processig 
} 

またパネル

0

DefaultButtonプロパティを見てあなたは(Response.Writeをを書くことができます)いくつかのJavaScriptまたはjQueryコードを印刷するあなたのAsp.net側で!

Response.Write("<script>document.getElementById('YOURFORMID').action = 'YOUR URL';</script>"); 

または

Response.Write("<script>$('#YOUR FORM ID').attr('action', 'YOUR URL');</script>"); 
ところで

あなたが.htmlにアクセスまたはの.jsファイルがある場合uが直接任意のC#コードせずに、このjQueryのコードを置くことができるjQueryを使って:@Scott Hannenは、このようないくつかのJavaScriptを書いたように!

関連する問題