2009-08-07 6 views
3

Ich suche nach Steuerelementnamen, die Request.Form verwenden.Suchen nach Steuerelementen in Request.Form/Analysieren einer NameValueCollection

Natürlich weiß ich, dass Sie alle Werte mit AllKeys durchlaufen können, und Sie können auch Form ["controlName"] tun.

Allerdings sind einige meiner Kontrolle Namen dynamisch und es wäre sinnvoll, die Lage sein, Dinge zu tun wie:

1) Abrufen eine Teilmenge von Kontrollen in der Sammlung whos Namen mit einem bestimmten Präfix beginnen 2) Suche für Steuerelementnamen, die mit einem Muster übereinstimmen, wie dies bei einem regulären Ausdruck der Fall wäre.

Aber ich kann nichts sehen, um so etwas zu tun.

N.B Ich kann FindControl für ASP.NET-Steuerelemente verwenden, aber diese sind Standard-HTML.

Antwort

7

Wenn Sie C# 3 verwenden, können Sie LINQ und Extension-Methoden verwenden, um dies auf sehr schöne Weise zu erreichen. Zuerst müssen Sie eine Erweiterungsmethode von Bryan Watts in this thread ersonnen erstellen:

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])); 
} 

Nun sagen Sie ein Formular wie folgt hatte:

<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> 

Sie können dies tun, in Ihrem Code-Behind:

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)); 
    } 
} 

Was würde ausgeben:

XXX_Name = 'Harold Pinter' 
XXX_Email = '[email protected]' 
XXX_Phone = '1234 5454 5454' 
0

Wiederholen Sie einfach Request.Form.AllKeys, tun Sie das gewünschte Muster für den Schlüsselnamen, und wenn es übereinstimmt, können Sie den Wert herausziehen.

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

Verwenden Sie foreach nicht (var-Schlüssel in Request.Form.AllKeys). Ich habe einen Defekt direkt vor mir, wo der Schlüssel nichts bewertet. Verwenden Sie den Zeichenfolgenschlüssel in Request.Form.AllKeys, um sicher zu sein.

Verwandte Themen