0

私は C#/ASP/.NET (学習しながら学ぶ) に慣れていないので、現在の方法の問題に加えて、劣った方法でこれを行っている可能性が非常に高いです。私はできるだけ明確にしようとします(多分そうかもしれません...)。

サーバーのホスト名のリストを改行で区切って入力するためのテキスト ボックスを含むフォームがあります。送信ボタンを押すと、PostBackUrl="~/btil_Info.aspx". btil_info.aspx.cs 分離コードでは、次をPage_Load()使用して前のフォームから上記のテキスト ボックス (hostnames_tb) から情報を取得します。

string hostnames = ((TextBox)Page.PreviousPage.FindControl("hostnames_tb")).Text;

Page_Load() 内で、このホスト名のリストをループし、ホストごとにいくつかのフィールド (ホストごとにいくつかのテキスト ボックスとドロップダウン メニュー) を含むフォームを作成します。これらのフィールドに入力した後、同じ分離コードで Submit_Click() を呼び出す [送信] ボタンを押すと、Submit_Click() が実行される前に Page_Load が再度呼び出されるため、ページがリロードされたように見えます。そうすることで、入力されたフォーム データが失われ、ホスト名のリストも失われます。

開発の初期段階では、これを最初のフォーム ページにすべて配置しましたが、送信ボタンは を呼び出さずPostBackURL、単に を呼び出しSubmit_Click()ました。これは完全に正常に機能しました。ページはリロードされず、フォームはページにとどまり、データは失われませんでした。ただし、現在と同様に、ボタンは同じように機能します。(私が見た)唯一の違いは、この面倒なページが前のフォーム呼び出しを介して到達することPostBackURLです。

ページの更新/再読み込みを要求する必要があるポイントはないと思います。フォームデータが投稿され、前のフォームからのホスト名のリストも取得可能である限り、ページが更新/再読み込みされるかどうかは実際には気にしません。フォーム データとホスト名のリストにアクセスして、SharePoint リストを更新する別のメソッドに渡すことができるようにする必要があるだけです (ただし、その部分のコードは既に機能しています)。hostnames2番目のコードビハインド(btil_Info.aspx.cs)で文字列をクラス変数にして、空の場合はページが読み込まれるとすぐに設定しようとしましたが、明らかにページのリロード後も持続せず、に戻されますヌル。

以下は、役立つと思われるコードのスニペットです。

最初のページ、add_BTIL.aspx:

<form id="form1" runat="server">
<div>
    <asp:TextBox ID="hostnames_tb" runat="server" Rows="20" TextMode="MultiLine" Width="225px"></asp:TextBox>
    <br />
    <asp:Button ID="Submit" runat="server" PostBackUrl="~/btil_Info.aspx" Text="Submit" />
    <br />
    <asp:Literal ID="result" runat="server"></asp:Literal>
    <br /><br />
    <textarea id="hostnames_textarea" cols="25" rows="20" name="hostnames" title="Hostnames"></textarea></div>
</form>

最初のページ分離コード、add_BTIL.aspx.cs:

protected void Page_Load(object sender, EventArgs e)
{

}

protected void Submit_Click(object sender, EventArgs e)
{
    string hostnames = hostnames_tb.Text;
    /*
     * Etc.
     */
}

2 ページ目、btil_Info.aspx:

<form id="hosts_form" runat="server">
    <p>
        <asp:Button ID="Submit" runat="server" Text="Submit" OnClick="Submit_Click" Height="26px" UseSubmitBehavior="False" /><br />
        <asp:Literal ID="result" runat="server"></asp:Literal><br />
    </p>
    <br />
</form>

^ このフォームでは、検索のどこかでUseSubmitBehavior="False"ページのリロードを妨げるものを読みましたが、役に立ちませんでした. とにかく、以前のバージョンでは使用しておらず、この問題はありませんでした。

2 ページ目の分離コード、btil_Info.aspx.cs:

protected void Page_Load(object sender, EventArgs e)
{
    string hostnames = ((TextBox)Page.PreviousPage.FindControl("hostnames_tb")).Text;
    // etc.....
}

protected void Submit_Click(object sender, EventArgs e)
{
    // etc.....
}

助けてくれてありがとう!

4

1 に答える 1

0

add_BTIL.aspx から btil_Info.aspx に投稿する場合、ファイル add_BTIL.aspx.cs の Submit_Click 関数は呼び出されません。

あなたがbtil_Info.aspxページのために私たちに与えた制限されたマークアップに基づいて... id="hosts_form" フォーム内のサーバーコントロール内にホスト名リストをレンダリングしていない場合、送信ボタンを押しても何も表示されませんSubmit_Click 関数に投稿されます。

個人的には、あるページから別のページへの投稿が好きではないので、以下にいくつかの提案を示します。

複数ページのウィザードを実行する場合は、asp.netウィザード コントロールを検討してください。または、シンプルに保ちたい場合は、2 つの asp Panel コントロールを使用して最初のコントロールを表示し、データを投稿してから、最初のコントロールを非表示にして 2 番目のコントロールを表示します。

于 2013-10-30T19:05:51.353 に答える