【问题标题】:Data Binding from FormCollection to Model从 FormCollection 到模型的数据绑定
【发布时间】: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&lt;string, string&gt; 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 =&gt; m.FirstName) 然后当您回帖到 public ActionResult Edit(Employee model) 时,该模型已为您绑定。您不需要(也不应该)翻译任何内容。

标签: c# asp.net asp.net-mvc asp.net-mvc-4 generics


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多