복잡한 개체 또는 모델 바인딩을 수동으로 직렬화하는 MVC

크리스찬 코디

MVC에서 가장 큰 문제 중 하나는 복잡한 속성 (뷰 모델)을 모델에 연결하여 폼에 사용할 때입니다. 예를 들어 Customer.cs라는 모델이 있습니다. 이 고객은 언제든지 1 개의 주문을 받았습니다. 그래서 나는 그에게 Customer.Order의 속성을 부여합니다. 고객은 그를 고유 한 고객으로 정의하는 많은 다른 속성을 가지고 있습니다. Order 속성에는 고유 한 속성 집합이 있습니다. 그래서 저는 컨트롤러, 다른 모델 값을 만들고, 마지막으로 뷰 세부 정보 작업을 시작합니다.
Form 자체를 정의하는 것으로 시작합니다.

@using (Html.BeginForm("Customer", "Home", FormMethod.Post, new { @id = "customerForm" })

이 양식 선언은 기본적으로 사용자가 제출을 클릭하면이 양식 내의 모든 것이 직렬화되어 컨트롤러로 전송되어야한다고 View에 알려줍니다. 먼저 주 모델 인 Customer.cshtml에 대한보기를 만듭니다. Customer.cs 모델을 사용합니다.

저는 Order.cshtml이라는이 복잡한 개체에 대해 특별히보기를 만듭니다. 그것은 Order.cs 모델을받습니다 (그래서 저는 똑똑하고 앞서 생각하기 때문에 Invoice와 같은 다른 상위 모델에서 나중에 재사용 할 수 있습니다.) 그래서 저는이 모든 자바 스크립트와 뷰에 의존하는 뷰 로직을 작성했습니다. 독립적이고 다른 모델과 재사용 가능합니다. 선언에 대한 내 텍스트 상자는 다음과 같습니다.

@Html.TextBoxFor(m => m. OrderDate) 

제출을 클릭 할 때 가장 먼저 발견 한 것은 Order 개체의 값이 다시 게시되지 않는다는 것입니다. 그래서 나는 거기 앉아서 디버그하고 시간이 걸리지 만 마침내 이것이 이런 식으로 작동하지 않을 것이라는 것을 알게되었습니다. 뷰 모델을 개별적으로 직렬화하는 방법이없는 한 상위 모델에 연결해도 기본 양식 제출 프로세스를 수동으로 재정의하기 위해 자바 스크립트를 작성해야하며 다른 모델 제출도 함께 작성해야합니다. 클라이언트 측 필드 유효성 검사를 위해.
이것을 처리하는 더 쉬운 방법이 있어야한다고 생각합니다. 이 문제에 대한 방법을 알고 있지만 예쁘지 않습니다. 대신 Customer.cs 모델을 가져 오도록 Order.cs에 대한보기를 만들 수 있습니다. 그런 다음 다음과 같은 선언에 텍스트 상자를 사용하십시오.

@Html.TextBoxFor(m => m.Order.OrderDate) 

보기의 모든 속성을 정의합니다. 이것은 기본 바인딩에서 작동하며 모든 것이 잘됩니다. 단, 이미 JavaScript로 작성한 코드는 어떻습니까? 양식에 배치 된 ID에 대한 모든 참조에 "Order_"를 추가해야합니다. 또한 이것은 이제 모델간에 쉽게 이동하지 않습니다. 이제는 Customer.cs 모델을 사용하므로 Order 개체를 사용하는 새 모델을 만들 때마다이 뷰를 다시 만들어야합니다. 또한 자바 스크립트를 다시 작성하거나 접두사 (ViewData)를 전달하는 멋진 방법을 찾아야합니다. 이것은 정확하지 않은 것 같습니다. 내가 무엇을 잘못하고 있지?

py3r3str

Order를 사용하는 모든 뷰 모델에 대한 인터페이스를 만드는 경우 :

interface IWithOrder
{
    Order Order { get; set; }
}

공통 주문보기에서이 인터페이스를 사용하십시오.

@model Project.ViewModels.IWithOrder
...
@Html.TextBoxFor(m => m.Order.OrderDate, new { Id = "OrderDate" }) 

고객의 경우 IWithOrder에서 파생 된 고객보기 모델을 만들 수 있습니다.

public class CustomerViewModel : IWithOrder
{
    public Order Order { get; set; }

    public Customer Customer { get; set; }
}

이제 Order를 재사용 할 수 있지만 뷰 모델은 IWithOrder에서 파생되어야합니다.

js 참조 에 추가하지 않으려 htmlAttributesTextBoxFor경우 매개 변수 에서 html 요소의 ID를 설정할 수도 있습니다 Order_.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

MVC의 게시물에서 모델을보기 위해 복잡한 개체 목록을 바인딩하는 방법은 무엇입니까?

분류에서Dev

복잡한 개체의 MVC 모델 바인딩

분류에서Dev

Flink에서 복잡한 모델을 직렬화하는 모범 사례

분류에서Dev

MVC 값 목록으로 복잡한 개체 바인딩

분류에서Dev

JSON으로 복잡한 객체 배열 게시, MVC 모델은 바인딩되지 않음

분류에서Dev

DynamicJsonArray가있는 복잡한 JSON 개체를 동적으로 역 직렬화

분류에서Dev

다형성 객체 컬렉션이있는 복잡한 모델을위한 커스텀 모델 바인더

분류에서Dev

복잡한 모델 개체에 대한 MVC 형식 사후 역 직렬화가 불완전합니다.

분류에서Dev

복잡한 json을 ASP.Net MVC의 모델에 매핑하는 방법

분류에서Dev

반복되는 중첩 템플릿을 복잡한 모델에 바인딩하는 방법

분류에서Dev

복잡한 XML을 개체로 역 직렬화

분류에서Dev

복잡한 개체를 저장할 때 새 모델 생성을 피하는 방법

분류에서Dev

MVC 4에서 작동하지 않는 모델 바인딩

분류에서Dev

현재 JSON 배열 (예 : [1,2,3])을 복잡하고 중첩 된 개체가있는 유형으로 역 직렬화 할 수 없습니다.

분류에서Dev

.NET MVC jQuery AJAX-값을 직렬화하지 않는 매개 변수로서의 JSON 객체

분류에서Dev

Jackson을 사용하여 HTTP Get을 위해 복잡한 Json 객체를 QueryString으로 직렬화하는 방법은 무엇입니까?

분류에서Dev

문제는 바인딩 모델이 복잡한 모델이라는 것입니다.

분류에서Dev

복잡한 개체를 Telerik의 RadGrid에 바인딩하는 방법

분류에서Dev

복잡한 자바 객체를 부분적으로 역 직렬화하기

분류에서Dev

복잡한 모델을 ActionAsPDF로 전달하는 방법은 무엇입니까?

분류에서Dev

복잡한 객체 목록을 JSON으로 직렬화

분류에서Dev

Immutablejs : 복잡한 JS 객체를 역 직렬화하는 방법

분류에서Dev

DateTime에 대한 MVC 모델 바인딩은 GET 또는 POST를 사용하여 다릅니다.

분류에서Dev

asp.net mvc의 컨트롤러에 복잡한 모델을 다시 전달하는 방법

분류에서Dev

복잡한 유형을 단순 유형으로 직렬화 / 역 직렬화하는 Newtonsoft JSON 변환기를 구현하는 방법

분류에서Dev

MVC 5 목록을 JSON 개체에 바인딩하는 방법

분류에서Dev

복잡하고 직렬화 할 수없는 개체를 Android 조각에 전달하는 방법

분류에서Dev

값 목록을 C # 개체로 역 직렬화하는 방법

분류에서Dev

C #에서 XML을 개체로 역 직렬화하는 방법

Related 관련 기사

  1. 1

    MVC의 게시물에서 모델을보기 위해 복잡한 개체 목록을 바인딩하는 방법은 무엇입니까?

  2. 2

    복잡한 개체의 MVC 모델 바인딩

  3. 3

    Flink에서 복잡한 모델을 직렬화하는 모범 사례

  4. 4

    MVC 값 목록으로 복잡한 개체 바인딩

  5. 5

    JSON으로 복잡한 객체 배열 게시, MVC 모델은 바인딩되지 않음

  6. 6

    DynamicJsonArray가있는 복잡한 JSON 개체를 동적으로 역 직렬화

  7. 7

    다형성 객체 컬렉션이있는 복잡한 모델을위한 커스텀 모델 바인더

  8. 8

    복잡한 모델 개체에 대한 MVC 형식 사후 역 직렬화가 불완전합니다.

  9. 9

    복잡한 json을 ASP.Net MVC의 모델에 매핑하는 방법

  10. 10

    반복되는 중첩 템플릿을 복잡한 모델에 바인딩하는 방법

  11. 11

    복잡한 XML을 개체로 역 직렬화

  12. 12

    복잡한 개체를 저장할 때 새 모델 생성을 피하는 방법

  13. 13

    MVC 4에서 작동하지 않는 모델 바인딩

  14. 14

    현재 JSON 배열 (예 : [1,2,3])을 복잡하고 중첩 된 개체가있는 유형으로 역 직렬화 할 수 없습니다.

  15. 15

    .NET MVC jQuery AJAX-값을 직렬화하지 않는 매개 변수로서의 JSON 객체

  16. 16

    Jackson을 사용하여 HTTP Get을 위해 복잡한 Json 객체를 QueryString으로 직렬화하는 방법은 무엇입니까?

  17. 17

    문제는 바인딩 모델이 복잡한 모델이라는 것입니다.

  18. 18

    복잡한 개체를 Telerik의 RadGrid에 바인딩하는 방법

  19. 19

    복잡한 자바 객체를 부분적으로 역 직렬화하기

  20. 20

    복잡한 모델을 ActionAsPDF로 전달하는 방법은 무엇입니까?

  21. 21

    복잡한 객체 목록을 JSON으로 직렬화

  22. 22

    Immutablejs : 복잡한 JS 객체를 역 직렬화하는 방법

  23. 23

    DateTime에 대한 MVC 모델 바인딩은 GET 또는 POST를 사용하여 다릅니다.

  24. 24

    asp.net mvc의 컨트롤러에 복잡한 모델을 다시 전달하는 방법

  25. 25

    복잡한 유형을 단순 유형으로 직렬화 / 역 직렬화하는 Newtonsoft JSON 변환기를 구현하는 방법

  26. 26

    MVC 5 목록을 JSON 개체에 바인딩하는 방법

  27. 27

    복잡하고 직렬화 할 수없는 개체를 Android 조각에 전달하는 방법

  28. 28

    값 목록을 C # 개체로 역 직렬화하는 방법

  29. 29

    C #에서 XML을 개체로 역 직렬화하는 방법

뜨겁다태그

보관