2014-11-05 2 views
0

내 뷰에서받은 데이터를 특정 모델에 바인딩하려고합니다. 양식 데이터를 사전 객체로 변환하려고합니다. 이것은 내가 개발 한 일반적인 메소드 인 TranslateFormData를 사용하여 완성됩니다. 이것은 내가 문제가있는 곳입니다. 이 라인, Dictionary<string, string> data = FormData.TranslateFormData (formData);이 나에게 문제를 일으키는데이터를 FormCollection에서 모델로 바인딩

[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 (); 
} 

: 여기

컨트롤러 코드입니다.
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 건네 다음과 같은 오류 생산 :

The type 'System.Web.Mvc.FormCollection' cannot be used as type parameter 'T' in the generic type or method 'TranslateFormData(T)'. There is no implicit >reference conversion from 'System.Web.Mvc.FormCollection' to 'System.Collections.Generic.IEnumerable>'

가 어떻게이 작업을 수행 할 수 있습니다 여기에 TranslateFormData의 코드는? 가능한 경우 TranslateFormData를 변경하여 특정 유형을 허용 한 다음 모든 예상 유형을 기반으로 오버로드하지 않도록합니다. 위의 질문이 의미하는 반면

EDIT Since initially writing this question I have modified my translation method accordingly:

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

    return request; 
} 

그래서,이 수정 메이크업 감각을 수행하고 그것은 적절하다?

+1

천국에서는 무엇을하고 있습니까? 사전을 원한다면 사전을 행동 매개 변수로 받아들이고 모델 바인더가 그것을 해결하도록하십시오. –

+0

@ChrisPratt 아무런 습격을받지 않았습니다. 나는 MVC 전체에 대해 아주 새롭고 불행히도 복잡한 프로세스에 MVC를 사용해야한다. 기본적으로 위 코드는 제 컨트롤러에 있습니다. 내가 원하는 것은 게시 된 데이터를 가져와 WCF 서비스에있는 클래스로 변환하는 것입니다. 또한 과부하없이 동일한 프로젝트의 다른 곳에서 "번역"방법을 활용할 수 있기를 원합니다. –

+0

클래스가'Employee'라고하고보기의 컨트롤이 강하게 입력 된 도우미를 사용하여 렌더링되는 경우. '@Html.TextBoxFor (m => m.FirstName)'그런 다음'public ActionResult Edit (Employee model)'에 다시 게시하면 모델이 바인딩됩니다. 당신은 아무것도 번역 할 필요가 없습니다. –

답변

1

모든 의견에 감사드립니다. 내가 택한 접근법은 무지에 근거했다. 올바른 모델을 사용하여 올바른 데이터를 내 컨트롤러에 다시 게시 할 수있게되었습니다. 또한 맞춤/특수 바인딩이 필요 없습니다.

제 문제는 모델을 올바르게 설정하지 않았기 때문입니다. 나는 자동 공용 속성 대신에 공공 필드를 지정하는 것뿐이었습니다. 내가 그 변화를 만들었 으면 다른 모든 것들이 제자리에 떨어졌습니다.

관련 문제