从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;
}
那么,尽管上述问题仍然存在,但这种修改有意义吗?它合适吗?
感谢您的评论。我所采取的方法是基于无知。我能够使用正确的模型将正确的数据发布到我的控制器上。此外,我不需要自定义/特殊绑定。
我的问题在于没有正确设置我的模型。我只是指定了公共字段,而不是自动公共属性。一旦我做出了改变,其他一切都会到位