【问题标题】:How can a formcollection be enumerated in ASP.NET MVC?如何在 ASP.NET MVC 中枚举 formcollection?
【发布时间】:2009-04-18 03:23:05
【问题描述】:

如何枚举所有的键/值 ASP.NET MVC 中的 FormCollection (system.web.mvc)?

【问题讨论】:

  • 进一步我们如何才能找到该项目是从文本框或隐藏字段或组合框等返回的?

标签: asp.net-mvc enumerator


【解决方案1】:

这里有 3 种专门使用 FormCollection 对象的方法。

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

【讨论】:

  • 请注意:ToValueProvider() 在框架 3.5 和 4.0 之间发生了变化
  • 我可以在键值对中从模型properties 中创建或Add 值到formcollection 吗?
【解决方案2】:
foreach(KeyValuePair<string, ValueProviderResult> kvp in form.ToValueProvider())
{
    string htmlControlName = kvp.Key;
    string htmlControlValue = kvp.Value.AttemptedValue;
}

【讨论】:

  • 这适用于框架 3.5,其中 ToValueProvider 返回一个 IDictionary。在 Framework 4.0 ToValueProvider 返回一个 IValueProvider。
【解决方案3】:
foreach(var key in Request.Form.AllKeys)
{
   var value = Request.Form[key];
}

【讨论】:

    【解决方案4】:

    在 .NET Framework 4.0 中,使用 ValueProvider 的代码是:

            IValueProvider valueProvider = formValues.ToValueProvider();
            foreach (string key in formValues.Keys)
            {
                ValueProviderResult result = valueProvider.GetValue(key);
                string value = result.AttemptedValue;
            }
    

    【讨论】:

      【解决方案5】:

      我用这个:

      string keyname;
      string keyvalue;
      
      for (int i = 0; i <= fc.Count - 1; i++)
      {
          keyname = fc.AllKeys[i];
          keyvalue = fc[i];
      }
      

      希望对某人有所帮助。

      【讨论】:

        【解决方案6】:

        在 VB.Net 中:

        Dim fv As KeyValuePair(Of String, ValueProviderResult)
        For Each fv In formValues.ToValueProvider
            Response.Write(fv.Key + ": " + fv.Value.AttemptedValue)
        Next
        

        【讨论】:

        • 当我尝试这个时,我得到“表达式的类型是'System.Web.Mvc.IValueProvider',它不是一个集合类型”。如果我忽略它编译的“ToValueProvider”,但我得到“指定的演员表无效。”
        • @DrydenMaker - 那是因为您使用的是 4.0。这个答案适用于 3.5
        猜你喜欢
        • 2011-03-04
        • 2015-08-31
        • 1970-01-01
        • 2011-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多