2011-10-31 151 views
0

早安。遇到别人实现的代码,我不理解如何使用FormCollection。 FormCollection仅仅是表单上控件的集合?C#MVC的.Net的FormCollection:如何使用的FormCollection

 public Email(FormCollection fc) 
     { 
      StringBuilder sb = new StringBuilder(); 
      this.fc = fc; 
      string[] keys = fc.AllKeys; 

      sb.Append("Category,\"REQUEST\",<br />"); 
      sb.Append("Type,\"TEST EXPRS\",<br />"); 
     } 
+0

这已经公布较早,您可以检查此[链接](http://stackoverflow.com/questions/762825/how-can-a-formcollection-be-enumerated-in-asp-net-mvc)为例如如何使用的FormCollection – SShebly

回答

5

在这个特定的代码片段中,它没有被使用,也没有完全不必要的参数。

个人而言,我从来没有在ASP.NET MVC应用程序中使用的FormCollection。我总是喜欢定义一个视图模型,并让控制器操作将此视图模型作为参数。它的属性将被默认的模型绑定器自动填充。例如:

public class MyViewModel 
{ 
    public string Property1 { get; set; } 
    public int Property2 { get; set; } 
    ... 
} 

然后:

public Email(MyViewModel model) 
{ 
    // use the view model here 
    ... 
} 

但是,回到你的问题:FormCollection表示键值对所有张贴的值。它是弱类型的,并且值始终是字符串,这意味着如果要操纵它们,则必须手动将它们转换为其基础类型。尽量避免它。

+1

@Murph,我只是分享什么,我认为是很好的做法。并且以FormCollection作为参数的控制器操作是恕我直言,不是一个好习惯。就这样。当然,每个人都有自己的良好实践定义,我感谢您的意见。 –

+0

好吧,我发表了评论的答案是上面没有答案...所以我已经删除了downvote – Murph

0

该代码是一个有点奇怪,因为它们是在提交键一个字符串数组,而不是通过它循环。原代码可能看起来是这样的:

FormCollection fc; 

public Email(FormCollection fc) 
    { 
     StringBuilder sb = new StringBuilder(); 
     this.fc = fc; 
     string[] keys = fc.AllKeys; 

     sb.Append("Category," + fc[keys[0]] + ",<br />"); 
     sb.Append("Type,"+ fc[keys[1]] +",<br />"); 
    } 

认为会工作,是他们可能如何获取值了。这当然不是最好的方法。作为Darin指出,formhandler甚至不会用于任何事情,所以在某些时候,编写这个的人可能期望有多个类别和类型,然后只是硬编码一些选项。