从FormCollection到模型的数据绑定

本文关键字:数据绑定 模型 FormCollection | 更新日期: 2023-09-27 18:29:12

我正在尝试将从视图接收的数据绑定到特定的模型。我想把表单数据翻译成字典对象。这是使用我开发的一种通用方法TranslateFormData完成的。这就是我遇到问题的地方。

这是控制器代码:

[HttpPost]
public System.Web.Mvc.ActionResult SubmitDecision ( FormCollection formData )
{
    Dictionary<string, string> data = FormData.TranslateFormData ( formData );
    TPDispatcherNetClient client = new TPDispatcherNetClient ( );
    *Additional code left out for brevity*        
    return View ( );
}

这行Dictionary<string, string> data = FormData.TranslateFormData ( formData );给我带来了问题。这是TranslateFormData:的代码

public static Dictionary<string, string> TranslateFormData<T> ( T form ) where T : IEnumerable<KeyValuePair<string, string>>
{
    Dictionary<string, string> data = new Dictionary<string, string> ( );
    IEnumerator<KeyValuePair<string, string>> pairs = form.GetEnumerator ( );
    return data;
}

传入FormCollection会产生以下错误:

类型"System.Web.Mvc.FormCollection"不能用作泛型类型或方法"TranslateFormData(T)"中的类型参数"T"。没有从"System.Web.Mvc.FormCollection"到"System.Collections.Generic.IEnumerable>"的隐式>引用转换

我怎样才能做到这一点?我希望避免将TranslateFormData更改为接受特定类型,然后根据所有期望的类型重载(如果可能的话)。

编辑自从最初写这个问题以来,我相应地修改了我的翻译方法:

public static CustomerDecisionRequest TranslateFormData<T> ( T form ) where T : NameValueCollection, IEnumerable
{
    CustomerDecisionRequest request = new CustomerDecisionRequest ( );
    IEnumerator enumerator = formData.GetEnumerator ( );
    return request;
}

那么,尽管上述问题仍然存在,但这种修改有意义吗?它合适吗?

从FormCollection到模型的数据绑定

感谢您的评论。我所采取的方法是基于无知。我能够使用正确的模型将正确的数据发布到我的控制器上。此外,我不需要自定义/特殊绑定。

我的问题在于没有正确设置我的模型。我只是指定了公共字段,而不是自动公共属性。一旦我做出了改变,其他一切都会到位