Friday, April 29, 2011

How can a formcollection be enumerated in ASP.NET MVC?

How can I enumerate through all the key/values of a FormCollection (system.web.mvc) in ASP.NET MVC?

From stackoverflow
  • foreach(var key in Request.Form.AllKeys)
    {
       var value = Request.Form[key];
    }
    
  • Here are 3 ways to do it specifically with a FormCollection object.

    public ActionResult SomeActionMethod(FormCollection formCollection)
    {
      foreach (var key in formCollection.AllKeys)
      {
        var value = formCollection[key];
      }
    
      foreach (var key in formCollection.Keys)
      {
        var value = formCollection[key.ToString()];
      }
    
      // Using the ValueProvider
      var valueProvider = formCollection.ToValueProvider();
      foreach (var key in valueProvider.Keys)
      {
        var value = valueProvider[key];
      }
    }
    
  • foreach(KeyValuePair<string, ValueProviderResult> kvp in form.ToValueProvider())
    {
        string htmlControlName = kvp.Key;
        string htmlControlValue = kvp.Value.AttemptedValue;
    }
    
  • And in VB.Net:

        Dim fv As KeyValuePair(Of String, ValueProviderResult)
        For Each fv In formValues.ToValueProvider
            Response.Write(fv.Key + ": " + fv.Value.AttemptedValue)
        Next
    
    DrydenMaker : I get "Expression is of type 'System.Web.Mvc.IValueProvider', which is not a collection type" when I try this. If I leave out the "ToValueProvider" it compiles, but I get "Specified cast is not valid."

0 comments:

Post a Comment