문제

아래의 예제 수업을 받으십시오. 양식에 고객과 두 개의 주소 (목록에서)를 표시하고 싶습니다. 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와 같은 객체 목록을 전달할 수 있지만 일부 줄을 변경해야합니다. 자세히보기 :

http://weblogs.asp.net/scottgu/archive/2007/12/06/asp-net-mvc-framework-3-passing-viewdata-from-controllers-to-views.aspx

그리고 여기:

ASP.NET MVC : 뷰에서 리피터에 목록 (모델 클래스에서)을 어떻게 전달합니까?

도움이 되었기를 바랍니다


편집하다


모델을 사용하는 경우 먼저 Datacontext를 설정하고 목록을 선택해야하지만 LINQ를 사용하는 경우 생성 된 클래스를 사용할 수 있는지 확인하십시오.

비슷한 개체를 정의했습니다. 위에서 참조 된대로 목록에 바인딩에 대한 게시물을 따랐으며 바인딩 작업은 컨트롤러의 액션 매개 변수에서 Bind Whitelist 또는 Blacklist를 사용할 수 없었습니다. 모델은 Ilist입니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top