2009-08-07 13 views
3

私はRequest.Formを使用してコントロール名を探しています。Request.Formのコントロールの検索/ NameValueCollectionの解析

もちろん、私はAllKeysを使ってすべての値を繰り返し処理でき、Form ["controlName"]も実行できることを知っています。

は、しかし、私のコントロールの名前のいくつかは動的であり、次のようなものを行うことができることが有用であろう:

1)名玉葉コレクション内のコントロールのサブセットを取得するには、特定の接頭辞 2)検索開始します正規表現の場合と同じように、パターンに一致するコントロール名が必要です。

しかし、このようなことをする方法はありません。

N.B私はFindControl for ASP.NETコントロールを使用する方法を知っていますが、これは標準HTMLです。

答えて

7

あなたはとても素敵な方法でこれを達成するためにLINQと拡張メソッドを使用することができますC#3を使用している場合。まず、あなたがthis threadBryan Wattsによって考案された拡張メソッドを作成する必要があります。

<form id="form1" runat="server"> 
<div> 
    <input type="text" name="XXX_Name" value="Harold Pinter" /> 
    <input type="text" name="XXX_Email" value="[email protected]" /> 
    <input type="text" name="XXX_Phone" value="1234 5454 5454" /> 

    <input type="text" name="YYY_Name" value="AN. Other" /> 
    <input type="text" name="YYY_Email" value="[email protected]" /> 
    <input type="text" name="YYY_Phone" value="8383 3434 3434" /> 

    <input type="submit" value="submit button" /> 
</div> 
</form> 

あなたは、あなたの分離コードでこれを行うことができます:

protected void Page_Load(object sender, EventArgs e) 
{ 
    var data = Request.Form.ToPairs().Where(k => k.Key.StartsWith("XXX_")); 

    foreach (var item in data) 
    { 
     Response.Write(String.Format("{0} = '{1}', ", item.Key, item.Value)); 
    } 
} 

public static IEnumerable<KeyValuePair<string, string>> ToPairs(this NameValueCollection collection) 
{ 
    if (collection == null) 
    { 
     throw new ArgumentNullException("collection"); 
    } 
    return collection.Cast<string>().Select(key => new KeyValuePair<string, string>(key, collection[key])); 
} 

を今、あなたはこのようなフォームを持っていたと言います

出力するもの:

0

Request.Form.AllKeysをループするだけで、キー名に必要なパターンを実行し、一致する場合は値を取り出すことができます。

foreach (var key in Request.Form.AllKeys) 
{ 
    if (key.StartsWith("abc")) 
    { 
     var value = Request.Form[key]; 
     Do_Something(key, value); 
    } 
} 
0

foreach(Request.Form.AllKeysのvarキー)は使用しないでください。私はキーが何かに評価されていない私の目の前に欠陥があります。安全であるためには、Request.Form.AllKeysの文字列キーを使用してください。

関連する問題