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

크로노 조아

MVC 4 Forms를 사용하여 List<T>속성 에 항상 4 개의 자식을 포함하는 모델이 있습니다. 이보기는 Razor 부분보기로 렌더링 된 4 개의 자식 모델 각각을 사용하여 모델을 올바르게 표시합니다. 문제는 제출 / 게시 할 때 모델이 자식 목록에 대해 null 값으로 역 직렬화된다는 것입니다.

모델:

public class MyModel
{
    public int SomeValue { get; set; }

    public List<ChildModel> Children { get; set; }

    ...
}

전망:

@model MyProject.Models.MyModel

@using (Html.BeginForm())
{
    @Html.LabelFor(model => model.SomeValue)

    @Html.Partial("ChildPartial", Model.Children[0])
    @Html.Partial("ChildPartial", Model.Children[1])
    @Html.Partial("ChildPartial", Model.Children[2])
    @Html.Partial("ChildPartial", Model.Children[3])

    <input type="submit" value="Save" />
}

제어 장치:

public class MyController : Controller
{
    public ActionResult Index()
    {
        MyModel model = new MyModel();
        model.Children = new List<ChildModel>();

        model.Children.Add(new ChildModel());
        model.Children.Add(new ChildModel());
        model.Children.Add(new ChildModel());
        model.Children.Add(new ChildModel());

        return View(model);
    }

    [HttpPost]
    public ActionResult Index(MyModel model)
    {
        //model.Children is null here

        //do stuff
        ...

        return RedirectToAction("Index", "SomeOtherController");
    }
}

ChildPartial뷰는 각 제대로 렌더링하고, 나는 컨트롤에 값을 입력하고, 그러나 그들은으로 직렬화되지 않습니다 List<ChildModel>. MyModelPost 메서드에서 역 직렬화 할 루트 수준 속성 만 가져올 수 있습니다 .

UpdateModel(model);컨트롤러 Post 메서드의 시작 부분에 추가하려고 시도 했지만 운이 없습니다. 어떤 아이디어?

편집하다

ChildModel.cs :

public class ChildModel
{
    public String Name { get; set; }
    public double Ratio { get; set; }
    ...
}

ChildPartial.cshtml :

@model MyProject.Models.ChildModel

<div>
    <div>
        <div>
            <span>@Model.Name</span>
        </div>
        <div>
            @Html.LabelFor(m => m.Ratio)
            @Html.TextBoxFor(m => m.Ratio, new { autocomplete = "off" })
            @Html.ValidationMessageFor(m => m.Ratio)
        </div>
    </div>

    ...
</div>
다린 디미트로프

먼저 기본 모델 바인더가 기대하는 특정 구문과 컬렉션에 바인딩 할 때 명명 규칙에 대해 읽어 볼 것을 권장합니다. http://haacked.com/archive/2008/10/23/model-binding-to-a-list .aspx

입력 필드의 이름을이 블로그 게시물에 설명 된 이름과 비교하면 코드가 작동하지 않는 이유를 매우 빠르게 이해할 수 있습니다. 표준 명명 규칙을 따르지 않습니다.

이 문제를 해결하려면 편집기 템플릿을 사용하는 것이 좋습니다. 따라서 기본보기에 다음을 입력하십시오.

@model MyProject.Models.MyModel

@using (Html.BeginForm())
{
    @Html.LabelFor(model => model.SomeValue)

    @Html.EditorFor(model => model.Children)

    <input type="submit" value="Save" />
}

그런 다음 이동 ChildPartial.cshtml에를 ~/Views/Shared/EditorTemplates/ChildModel.cshtml. 템플릿의 이름과 위치는 매우 중요합니다. 당신이 그것을 따랐는지 확인하십시오. 그리고 이것을 안에 넣으십시오.

@model MyProject.Models.ChildModel

<div>
    <div>
        <div>
            <span>@Model.Name</span>
        </div>
        <div>
            @Html.LabelFor(m => m.Ratio)
            @Html.TextBoxFor(m => m.Ratio, new { autocomplete = "off" })
            @Html.ValidationMessageFor(m => m.Ratio)
        </div>
    </div>

    ...
</div>

좋아, 이제 프로젝트를 실행하고 생성 된 HTML을 검사하고 더 구체적으로 입력 필드의 이름을 초기 버전과 비교하고 내 대답에서 처음에 링크 한 블로그 게시물과 비교하면 모델 바인딩 방법에 대한 모든 것을 이해할 수 있습니다 컬렉션은 ASP.NET MVC에서 작동합니다.

참고 : 자식 템플릿에는 NameChildModel 속성에 해당하는 입력 필드가 없습니다 . 따라서 컨트롤러에서 null 인 경우 놀라지 마십시오. 양식이 제출 될 때 단순히 값을 보내지 않습니다. 이 작업을 수행하려면 편집기 템플릿에 숨겨진 필드로 포함 할 수 있습니다.

@Html.HiddenFor(m => m.Name)

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

복잡한 JSON 개체 역 직렬화

분류에서Dev

NestJS가 복잡한 유형을 사용하여 @Query ()를 DTO로 역 직렬화

분류에서Dev

복잡한 Json 객체 역 직렬화

분류에서Dev

Ember 데이터로 복잡한 모델 역 직렬화

분류에서Dev

Json .Net은 플랫 객체를 복잡한 객체로 직렬화합니다 (직렬화 / 역 직렬화에 대한 객체 구조 변경).

분류에서Dev

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

분류에서Dev

사용자 지정 XmlSerialization을 사용하여 복잡한 개체 역 직렬화

분류에서Dev

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

분류에서Dev

ReadAsAsync <T> ()를 사용하여 복잡한 Json 개체 역 직렬화

분류에서Dev

GSON은 복잡한 객체 배열을 역 직렬화합니다.

분류에서Dev

C #에서 복잡한 json 파일을 역 직렬화하려고합니다.

분류에서Dev

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

분류에서Dev

복잡한 JSON 개체 역 직렬화 C #

분류에서Dev

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

분류에서Dev

JSON 역 직렬화에 대한 잘못된 형식

분류에서Dev

@JsonTypeInfo 및 @JsonSubTypes를 사용하여 JSON을 다형성 개체 모델로 역 직렬화하지 않습니까?

분류에서Dev

Json은 인터페이스를 속성으로 사용하여 복잡한 개체를 역 직렬화합니다.

분류에서Dev

Java 직렬화 / 역 직렬화에 대한 안전한 json

분류에서Dev

구조체를 사용하여 불완전한 형식에 대한 포인터 역 참조

분류에서Dev

직렬화 된 형식에서로드 한 후 개체를 캐스팅해야합니까?

분류에서Dev

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

분류에서Dev

자식 개체 및 형제 개체에서 개체 이름이 동일한 XML Serializer를 사용하여 개체를 직렬화 할 수 없습니다.

분류에서Dev

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

분류에서Dev

모델에 대한 codeigniter 전역 배열

분류에서Dev

사용자 지정 클래스의 개체에 대한 NSMutableArray의 직렬화 및 역 직렬화

분류에서Dev

리소스에 사용 가능한 역 직렬화 방법이 없습니다.

분류에서Dev

Jackson을 사용하여 Guava의 테이블을 역 직렬화하면 "JsonMappingException : 유형에 적합한 생성자가 없습니다."가 발생합니다.

분류에서Dev

C #, Twitch Pubsub에서 복잡한 JSON 역 직렬화

분류에서Dev

XML 역 직렬화 : xmlString에서 복잡한 클래스로

Related 관련 기사

  1. 1

    복잡한 JSON 개체 역 직렬화

  2. 2

    NestJS가 복잡한 유형을 사용하여 @Query ()를 DTO로 역 직렬화

  3. 3

    복잡한 Json 객체 역 직렬화

  4. 4

    Ember 데이터로 복잡한 모델 역 직렬화

  5. 5

    Json .Net은 플랫 객체를 복잡한 객체로 직렬화합니다 (직렬화 / 역 직렬화에 대한 객체 구조 변경).

  6. 6

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

  7. 7

    사용자 지정 XmlSerialization을 사용하여 복잡한 개체 역 직렬화

  8. 8

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

  9. 9

    ReadAsAsync <T> ()를 사용하여 복잡한 Json 개체 역 직렬화

  10. 10

    GSON은 복잡한 객체 배열을 역 직렬화합니다.

  11. 11

    C #에서 복잡한 json 파일을 역 직렬화하려고합니다.

  12. 12

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

  13. 13

    복잡한 JSON 개체 역 직렬화 C #

  14. 14

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

  15. 15

    JSON 역 직렬화에 대한 잘못된 형식

  16. 16

    @JsonTypeInfo 및 @JsonSubTypes를 사용하여 JSON을 다형성 개체 모델로 역 직렬화하지 않습니까?

  17. 17

    Json은 인터페이스를 속성으로 사용하여 복잡한 개체를 역 직렬화합니다.

  18. 18

    Java 직렬화 / 역 직렬화에 대한 안전한 json

  19. 19

    구조체를 사용하여 불완전한 형식에 대한 포인터 역 참조

  20. 20

    직렬화 된 형식에서로드 한 후 개체를 캐스팅해야합니까?

  21. 21

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

  22. 22

    자식 개체 및 형제 개체에서 개체 이름이 동일한 XML Serializer를 사용하여 개체를 직렬화 할 수 없습니다.

  23. 23

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

  24. 24

    모델에 대한 codeigniter 전역 배열

  25. 25

    사용자 지정 클래스의 개체에 대한 NSMutableArray의 직렬화 및 역 직렬화

  26. 26

    리소스에 사용 가능한 역 직렬화 방법이 없습니다.

  27. 27

    Jackson을 사용하여 Guava의 테이블을 역 직렬화하면 "JsonMappingException : 유형에 적합한 생성자가 없습니다."가 발생합니다.

  28. 28

    C #, Twitch Pubsub에서 복잡한 JSON 역 직렬화

  29. 29

    XML 역 직렬화 : xmlString에서 복잡한 클래스로

뜨겁다태그

보관