2012-09-11 2 views
0

배경이 주로 PHP이므로 폼에서 딥 배열을 매우 쉽게 사용할 수 있습니다.C#/mvc에 알 수없는 깊이/길이의 배열을 게시하는 방법

<input type="text" name="data[0][index_name][0]"> 
<input type="text" name="data[0][index_name][1]"> 
<input type="text" name="data[1][index_name][0]"> 
<input type="text" name="data[1][index_name][1]"> 
<input type="text" name="data[2][index_name][0][something_else]"> 
<input type="text" name="data[2][index_name][0]"> 
<input type="text" name="data[2][index_name][1]"> 

이 다음 PHP에서이 방법으로 액세스 할 수 ...

$_POST['data'][0]['index_name'][0]; 
$_POST['data'][0]['index_name'][1]; 
$_POST['data'][1]['index_name'][0]; 
$_POST['data'][1]['index_name'][1]; 
$_POST['data'][2]['index_name'][0]['something_else']; 
$_POST['data'][2]['index_name'][0]; 
$_POST['data'][2]['index_name'][1]; 

내가 해봤 /에서보고를 통해 루핑 : 내가 필요한 것은 다음의 C#을/MVC의 equivelant입니다 formColletion 개체를 수신하지만 키는 단순히 "data [2] [index_name] [0] [something_else]"와 같은 이름 특성 문자열이며 데이터의 깊이는 없습니다.

어떻게이 데이터를 구문 분석하고 사용할 수있는 데이터 유형을 넣으시겠습니까? 프런트 엔드에서 폼이 동적으로 변경 될 때 배열의 깊이가 얼마나 될지 모르겠습니다.

컨텍스트가 있으므로이 테이블은 유연한 수의 행과 열이있는 데이터의 "테이블"을 작성하는 데 사용되며 각 행은 표준 행 또는 그룹화 행으로 취급 될 수 있습니다. 행), 데이터는 이론적으로 매우 깊어 질 수 있습니다.

참고로 클라이언트 측에서 데이터를 정리할 생각도 있지만 지원하는 표준이 없습니다. Jquery.serialize 및 JQuery.serializeArray()는 C#/MVC와 동일한 작업을 수행하고 배열 인덱스를 고려하지 않고 전체 이름 특성의 모든 항목을 간단히 인덱싱합니다.

도움 주셔서 감사합니다.

+1

당신이 C#을 잘 알고 있고 PHP 코드와 참조 ("깊이"와 같이)를 잘 알고 있다고 생각하지 않는다면 더 많은 반응을 얻게 될 것입니다. . – RBarryYoung

+0

명확히하는 방법을 정확히 모르겠습니다. 여러 수준의 배열에 액세스하는 방법은 대부분의 프로그래밍 언어에서 매우 일반적입니다. C# 사전과 비슷한 PHP 배열을 사용할 수 있다고 생각합니다. 내가 깊이를 말할 때, 나는 사전 (예를 들면 - var [ "level1"] [ "level2"])의 다른 레벨들을 간단하게 언급 할 뿐이다. –

답변

0

모델은 올바른 해결책이 될 밝혀졌다 바인딩. 그것은 재귀 적으로 상자를 지원합니다. http://msdn.microsoft.com/en-us/magazine/hh781022.aspx

+1

이것이 아주 오래된 질문 인 것으로 알고 있지만 Scott이 [link] http://www.hanselman.com/을 설명했다고 생각합니다. 블로그/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx 이해하기 쉬운 방법으로 –

0

깊은 측면에 대해서는 잘 모르겠지만 동일한 이름의 항목을 게시하면 MVC는 이것을 배열로 재구성합니다.

<input type="hidden" name="MyArray" value="1"/> 
<input type="hidden" name="MyArray" value="2"/> 
<input type="hidden" name="MyArray" value="3"/> 
<input type="hidden" name="MyArray" value="4"/> 

그리고 컨트롤러에

[HttpPost] 
public ActionResult MyActionMethod(string[] MyArray) 
{ 
    // Do stuff with MyArray 
} 

또한 컨트롤러에 Request.Form 모음에 액세스 할 수 있습니다. 키는 HTML 양식의 입력 부분에있는 이름입니다.

Request.Form["data[2][index_name][0][something_else]"] 

을 또는 이런 식으로 반복 :

이처럼 액세스 할 수 있습니다

[HttpPost] 
public ActionResult MyActionMethod() 
{ 
    foreach(var key in Request.Form.Keys) 
    { 
    var item = Request.Form[key]; 
    // Do stuff with each item 
    } 
} 
+1

네,이 방법으로 데이터에 액세스 할 수 있지만 Request.Form [ "data [2] [index_name] [0] [something_else]"]을 사용하면 데이터를 사용할 수있는 형식으로 저장하는 데 도움이되지 않습니다. 키 문자열을 구문 분석하고 데이터를 다시 작성할 수 있지만 더 나은/깨끗한 솔루션이 있어야합니다. –

관련 문제