0

ASP.NET にいくつかの動的コントロールがあります。存在しなくなったコントロールからポストバックの値を取得する必要があります。

次のコードは完全に機能します。

value = Request.Form["ctl00$ContentPlaceHolder1$text_name"];

ただし、パーツを動的に生成したり、コントロールが存在しなくなったときに"ctl00$ContentPlaceHolder$"値を取得したりするエレガントな方法があるかどうかは疑問です。textbox_value.UniqueID

この質問が何百万回も前に出てきた場合はお詫びします。サーバーの設定を変更する必要のない、より洗練されたソリューションを探しているだけです。

編集:

リクエストに応じて、コントロールを追加するコードは次のようになります。

foreach (NameValuePair entry in database_table){

    Label label = new Label();
    label.ID = "label_" + entry.Name;
    label.Value = entry.Name;
    label.Attributes.Add("runat", "server");

    TextBox textBox = new TextBox();
    textBox.ID = "text_" + entry.Name;
    textBox.Text = entry.Value;
    textBox.Attributes.Add("runat", "server");
}

ボタンをクリックすると、データベース テーブルから名前と値のペアが読み込まれ (エントリの数は静的ではありません)、それらを変更できるようになり、[保存] ボタンが押されたときに保存されます。ポップアップのように機能するため、フィールドはポストバックで消えます。(コードのこの部分は変更しないでください)

ありがとう〜

4

2 に答える 2

2

データを解析するための独自の関数を作成することになりましたRequest.Form。指定されたコントロールを検索し、コントロールattnameの値を返します。

private string findControlValue(string attname)
{
    string[] request = Request.Form.ToString().Split('&');
    string searchkey = "txt_" + attname;

    foreach (string seg in request)
    {
        if (seg.Contains(searchkey))
        {
            string ctrlName = seg.Split('=')[0];
            string ctrlValue = seg.Split('=')[1];
            string value = Server.UrlDecode(ctrlValue);
            return value;
        }
    }
    return null;
}
于 2013-08-22T14:47:44.427 に答える
1

ASP.net 4.0 以降を使用している場合は、コントロールのClientIdModeを静的に設定すると、コントロールに使用する ID がクライアント側で使用される ID になります (ただし、これはコントロールには機能しません)。リピーターのようなコントロールにある - 静的 ID はページに固有である必要があります)。これを行うことができれば、コントロールに「より使いやすい」ID値を設定できるようになります(質問に示されているように、データ取得の予測が容易になります)。

于 2013-08-21T14:40:54.940 に答える