ASP.NET MVC 베타 지원 목록의 모델 바인더는?
-
03-07-2019 - |
문제
아래의 예제 수업을 받으십시오. 양식에 고객과 두 개의 주소 (목록에서)를 표시하고 싶습니다. MVC 베타의 모델 바인더가 이것을 지원합니까, 아니면 내 자신의 커스텀 바인더를 작성해야합니까?
public class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
public List<Address> Addresses { get; set; }
public Customer()
{
Addresses = new List<Address>();
}
}
public class Address
{
public int Line1 { get; set; }
public int Line2 { get; set; }
public int City { get; set; }
public int State { get; set; }
public int Zip { get; set; }
}
필드를 어떻게 코딩 하시겠습니까? 이와 같이?
<!-- some HTML formatting -->
<%= Html.TextBox("customer.address.line1", ViewData.Customer.Address[0].Line1)%>
<!-- some more HTML formatting -->
<%= Html.TextBox("customer.address.line1", ViewData.Customer.Address[1].Line1)%>
<!-- end of HTML form formatting -->
해결책
나는 그것을 시도한 적이 없지만 참조하십시오 이것 게시물, 그것은 목록에 대한 모델 바인딩에 관한 것입니다. 아마도 도움이 될 수 있습니다.
다른 팁
mvccontrib의 namevaluedeSerializer를 사용하여 더 간단하게 만듭니다. 페이지가 ViewPage에서 파생된다고 가정 해 봅시다u003CCustomer> . 당신은 이것을 할 수 있습니다 :
<%= Html.TextBox("Address[0].Line1", ViewData.Model.Address[0].Line1)%>
<%= Html.TextBox("Address[1].Line1", ViewData.Model.Address[1].Line1)%>
이:
public ActionResult Save([Deserialize]Customer customer)
그리고 고객은 주소 컬렉션이 채워진 양식 게시물에서 제조됩니다. 인덱스는 순서대로있을 필요가 없습니다. 이는 게시물이 발생하기 전에 클라이언트 측에서 행을 제거하려는 경우를 지원합니다.
뷰 데이터 사전 (모델 대신)에서 무언가를 사로 잡는 경우 구문은 [deserialize ( "customer")]와 같습니다. 여기서 "고객"은 접두사입니다.
당신은 이것을 찾을 수 있습니다 블로그 게시물 흥미롭고 관련성이 있습니다.
이것을 완료하기 위해. 이름 인덱스와 함께 숨겨진 필드를 사용하는 것이 중요합니다. 그래서 위의 내 코드는 다음과 같습니다.
<!-- some HTML formatting -->
<%= Html.Hidden("customer.address.Index", 0) %>
<%= Html.TextBox("customer.address[0].line1", ViewData.Customer.Address[0].Line1)%>
<!-- some more HTML formatting -->
<%= Html.Hidden("customer.address.Index", 1) %>
<%= Html.TextBox("customer.address[1].line1", ViewData.Customer.Address[1].Line1)%>
<!-- end of HTML form formatting -->
그것은 매력처럼 작동합니다!
ViewData와 같은 객체 목록을 전달할 수 있지만 일부 줄을 변경해야합니다. 자세히보기 :
그리고 여기:
ASP.NET MVC : 뷰에서 리피터에 목록 (모델 클래스에서)을 어떻게 전달합니까?
도움이 되었기를 바랍니다
편집하다
모델을 사용하는 경우 먼저 Datacontext를 설정하고 목록을 선택해야하지만 LINQ를 사용하는 경우 생성 된 클래스를 사용할 수 있는지 확인하십시오.
비슷한 개체를 정의했습니다. 위에서 참조 된대로 목록에 바인딩에 대한 게시물을 따랐으며 바인딩 작업은 컨트롤러의 액션 매개 변수에서 Bind Whitelist 또는 Blacklist를 사용할 수 없었습니다. 모델은 Ilist입니다