0

この質問には明らかな答えがあると信じていましたが、何も見つからないようです。いくつかの動的に作成された入力コントロールがあるコンテンツ ページを持つ ASP.Net MasterPage があります。それらを含むフォームを投稿すると、それらの値を取得したいと思います。これは、コントロールの name 属性を使用し、Request.Form[name] を呼び出すことによってのみ可能です。

入力コントロールは ContentPlaceHolder の一部であるため、名前属性にはコントロールの UniqueId が割り当てられます。これは、たとえば「ctl00$skts_body_div$MyNameId」のような文字列です。

上記の例の名前はランダムに生成された名前ではありませんが、コントロールの親の構造に依存するため、ポストバックで「ctl00$skts_body_div$MyNameId」という名前を生成するのは簡単ではないため、呼び出すことができますRequest.Form["ctl00$skts_body_div$MyNameId"].

投稿されたデータを取得するベスト プラクティスの方法は何ですか?

プラットフォームは.Net 4.0

ありがとうジハード

4

1 に答える 1

0

ブラウザでjavascriptを使用してname属性をidと等しくなるように設定できることがわかりました。これは jquery で簡単に実行できますが、jquery を使用しない場合は、別のオプションとして、入力要素とポストバック可能なその他の要素を反復処理することができます。

唯一の欠点は、動的に作成されたコントロールのみを変更し、runat="server" ASP コントロールにヒットしないようにする必要があることだと思います。それらは name 属性を使用して値を割り当てるためです。

次のコードは、私が使用する JavaScript です。

function SetControlNamesToId() {
    var inputObjects = document.getElementsByTagName('input');
    for (i = 0; i < inputObjects.length; i++) {
        if (inputObjects[i].type == 'checkbox' ||
            inputObjects[i].type == 'radio' ||
            inputObjects[i].type == 'text' || 
            inputObjects[i].type == 'hidden') {
            SetNameToId(inputObjects[i]);
        }
    }

    var selectObjects = document.getElementsByTagName('select');
    for (i = 0; i < selectObjects.length; i++) {
        SetNameToId(selectObjects[i]);
    }

    var textAreaObjects = document.getElementsByTagName('textarea');
    for (i = 0; i < textAreaObjects.length; i++) {
        SetNameToId(textAreaObjects[i]);
    }
}

function SetNameToId(control)
{
    if (control.id && control.id != "") {
        control.setAttribute("name", control.id);
    }
}
于 2013-04-29T08:38:51.037 に答える