2013-06-07 7 views
-1

속성이있는 모델이 있는데 그 중 하나는 컬렉션입니다.요소없이 JS를 사용하여 양식 값 게시 하시겠습니까?

일부 값으로 해당 컬렉션을 설정하는 클라이언트 JS 함수가 필요합니다 (또는 별도의 매개 변수를 통해 컨트롤러 작업에 보내거나 모델 바인더를 통해 실제로 알지 못합니다).

어떻게 가능합니까?

+0

네, 가능합니다.이 경우 jav ascript 및 url의 값을 캡처하거나 backbonejs를 사용하는 함수를 만들면이 태그는 이미 이런 종류의 것을 제공합니다 (http://backbonejs.org/#Router) –

+0

어떻게 답변을 게시 할 수 있습니까? 모델 바인딩은 어떻습니까? – Shimmy

답변

1

당신은 JSON을 사용하여 임의의 복잡한 구조를 보낼 수 :

$.ajax({ 
    url: '/somecontroller/someaction', 
    type: 'POST', 
    contentType: 'application/json', 
    data: JSON.stringify({ 
     id: 123, 
     items: [ 
      { foo: 'bar 1' }, 
      { foo: 'bar 2' }, 
      { foo: 'bar 3' } 
     ] 
    }), 
    success: function(result) { 
     alert('ok'); 
    } 
}); 

와 JSON 구조와 일치하는 뷰 모델 걸릴 것입니다 컨트롤러의 액션은 다음과 같다 : 여기

[HttpPost] 
public ActionResult SomeAction(MyViewModel model) 
{ 
    ... 
} 

및 모델 정의 매칭이있어 샘플 구조 :

public class MyViewModel 
{ 
    public int Id { get; set; } 
    public ItemViewModel[] Items { get; set; } 
} 

public class ItemViewModel 
{ 
    public string Foo { get; set; } 
} 
+1

JS를 사용하여 값을 게시하지 않고 정기적으로 양식을 제출할뿐입니다. 게시 된 양식에서 모델의 컬렉션 속성을 설정하는 방법을 모르겠습니다. 아마도 위조 요소가 가장 좋은 방법 일 수 있습니다. 즉,'name' 속성이'Model.CollectionProperty [0]','Model.CollectionProperty [1]'등으로 설정된 숨겨진 요소를 생성하는 것입니까? – Shimmy

+2

양식을 정기적으로 게시하는 경우 기본 모델 바인더가 사용하는 입력 필드에 대한 표준 명명 규칙을 준수해야합니다. http://haacked.com/archive/2008/10/23/model-binding-to-a -list.aspx 숨겨진 필드를 사용하려는 경우'@ Html.HiddenFor (x => x.CollectionProperty [index] .SomeSubProperty)'와 같이 생성 할 수 있습니다. –

+0

참고 용으로 답안에 의견을 포함 시키면 좋을 것입니다. – Shimmy