c# MVC . net FormCollection: FormCollection是如何使用的

本文关键字:FormCollection 何使用 MVC net | 更新日期: 2023-09-27 18:12:56

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

c# MVC . net FormCollection: FormCollection是如何使用的

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

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

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

然后:

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

但是回到你的问题:FormCollection代表所有post值的键值对。它是弱类型的,值总是字符串,这意味着如果想要操作它们,必须手动将它们转换为它们的底层类型。尽量避免使用

代码有点奇怪,因为它们将键提交给字符串数组,而不是循环遍历它。原始代码可能看起来像这样:

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甚至没有被用来做任何事情,所以在某些时候,可能写这篇文章的人期望有多个类别和类型,然后只是硬编码了一些选项。