C#MVC .Net FormCollection:如何使用FormCollection

时间:2011-10-31 13:45:01

标签: c# asp.net-mvc

早上好。遇到了其他人实现的代码,我不知道如何使用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 />");
         }

2 个答案:

答案 0 :(得分: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代表所有POSTed值的键值对。它是弱类型的,值总是字符串意味着如果你想操纵它们,你必须手动将它们转换为它们的底层类型。尽量避免它。

答案 1 :(得分: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 />");
     }

认为会起作用,可能就是他们如何获得价值。这肯定不是最好的方式。

正如达林所指出的那样,平庸程序甚至似乎没有用于任何东西,所以在某些时候,也许任何人写这篇文章都希望有多个类别和类型,然后硬编码一些选项。