2009-11-30 6 views
0

얼마 전, 내보기에서 사전 데이터를 내 컨트롤러로 전달하려고했습니다. 그리고 인터넷에서 인터넷 검색을 한 후 그렇게 할 수있었습니다 (Scott Hanselman의 게시물 중 하나임을 기억하십시오). 내가 가진 해결책은 비슷했다.보기에서 컨트롤러로 사전 데이터 전달

<%for(int index=0; index<Model.Count(); index++){ 
    var property= Model.ElementAt(index);%> 
    <input type="hidden" name="<%="properties["+index+"].Key"%>"/> 
    <input type="hidden" name="<%="properties["+index+"].Value"%>"/> 
<%}%> 

public ActionResult Process(IDictionary<string,string> properties) 
{ 
     doSomething(); 
     return View(); 
} 

잠시 동안 코드가 작동했다가 리팩터링을하고이 코드 조각을 제거했다. 오늘 나는 사전을 다시 전달하고자하는 상황에 처했습니다. 그러나 아무리 노력해도, 의 속성은 액션에 의해 항상 수신되었습니다. 위의 코드를 사용해 보았습니다.

<%for(int index=0; index<Model.Count(); index++){ 
    var property= Model.ElementAt(index);%> 
    <input type="hidden" name="<%="properties.Keys["+index+"]"%>"/> 
    <input type="hidden" name="<%="properties.Values["+index+"]"%>"/> 
<%}%> 

어느 코드도 작동하지 않았습니다. 나는 다시 googled 그러나 나를 도왔던 지위를 발견 할 수 없었다. 누군가 내가 잘못한 것을 지적 할 수 있습니까? 대단히 감사합니다.

업데이트 : 생성 된 html 코드에 지속적인 증분 인덱스가 없기 때문에 문제가 발생한 것으로 나타났습니다. 예를 들어, 속성 [0], 속성 [1], 속성 [3] ... (속성 [2]가 누락되었습니다). 이런 종류의 문제가 발생하면 방화범이 가장 친한 친구가 될 것입니다.

+0

당신이 렌더링 된 HTML과 모델 클래스를 보여줄 수 시도 할 수 있습니다? –

답변

0

인덱서의 위치가 잘못되었습니다. 인덱서는 속성 개체의 인덱스 여야합니다. 나는에 allways는 spectated 키가 포함되어 있음을 보장하기 위해 FormCollection 키를 확인 이런 종류의 문제가있는 경우

<%for(int index=0; index<Model.Count(); index++{ 
    var property= Model.ElementAt(index);%> 
    <input type="hidden" name="<%="properties["+index+"].Key"%>"/> 
    <input type="hidden" name="<%="properties["+index+"].Value"%>"/> 
<%}%> 
+0

하지만 첫 번째 스 니펫은 사용자가 제안한 것입니다. 그것은 작동하지 않았다. 그건 그렇고, 그것이 가까운 괄호가 누락 되었기 때문에 나는 원래 게시물을 편집했습니다. –

+0

죄송합니다. 하단에 '어느 쪽도 효과가 없습니다'라는 내용을 놓쳤습니다. 게시 된 작업의 양식 모음을 검토하여 반환되는 항목을 확인하십시오. 또한 연결에 대한 색인에 ToString이 필요하지 않습니까? – Paddy

0

, 당신은 ActionMethod에 중단 점을 넣어이 작업을 수행 할 수 있습니다.

public ActionResult Process(IDictionary<string,string> properties, FormCollection f) 

그리고 "F"는 올바른 키가 있는지 확인한다.

또한

TryUpdateModel(properties, "properties"); 
관련 문제