【发布时间】:2014-11-05 18:11:13
【问题描述】:
我正在尝试将从我的视图接收到的数据绑定到特定模型。我想将表单数据翻译成字典对象。这是使用我开发的通用方法 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;
}
那么,尽管上述问题成立,但这种修改是否有意义,是否合适?
【问题讨论】:
-
无意冒犯,但你在天堂做什么?如果您需要字典,请接受字典作为您的操作参数,然后让模型绑定器解决。
-
@ChrisPratt 没有冒犯。我对整个 MVC 很陌生,不幸的是我需要将 MVC 用于复杂的过程。基本上,上面的代码在我的控制器中。我要做的就是获取发布的数据并将其转换为 WCF 服务中的类。我还希望能够在同一个项目的其他地方使用“翻译”方法而不必超载。
-
如果你的类是
Employee并且你的视图中的控件是使用强类型帮助器呈现的,例如@Html.TextBoxFor(m => m.FirstName)然后当您回帖到public ActionResult Edit(Employee model)时,该模型已为您绑定。您不需要(也不应该)翻译任何内容。
标签: c# asp.net asp.net-mvc asp.net-mvc-4 generics