ASP.NET MVC 5 Html.HiddenFor는 잘못된 속성 값을 렌더링하지만 Model.Property는 올바른 값을 렌더링합니다.

MikeJansen
  • Visual Studio 2013 Professional
  • 씨#
  • .NET 4.5 프레임 워크
  • ASP.NET MVC 5

내 뷰 모델 클래스에는 SerializedSelf자신을 직렬화 된 문자열로 나타내고 역 직렬화하는 데 사용되는 속성이 있지만 아직 초기화되지 않은 속성에 대해서만 사용됩니다. 이 값으로 숨겨진 단일 입력을 가짐으로써 뷰 모델의 라운드 트립을 단순화하기 위해 이것을 사용합니다. 모델과 관련된 다른 입력은 컨트롤러 메서드로 전달되기 전에 프레임 워크에 의해 모델에 채워집니다.

내가 가진 문제는 내 면도기보기 코드에서 이것이 제대로 렌더링되지 않는다는 것입니다.

 @Html.HiddenFor(model => model.SerializedSelf)

완전히 초기화되지 않은 MyViewModel개체를 직렬화 하는지 아니면 다른 곳의 인스턴스 인지 확인하지 않았습니다 .

그러나 이것은 제대로 작동합니다.

 <input type="hidden" name="SerializedSelf" id="SerializedSelf" value="@Model.SerializedSelf" />

그래서 나는 그것이 람다 식 및 인클로저와 관련이있을 것이라고 생각합니다. ??? 소스 코드를 단계별로 살펴보면을 SerializedSelf호출하기 직전에 적절한 값이 return View("myView", model)있습니다.

다음은 뷰 모델 코드입니다.

using Newtonsoft.Json;
using System;
using System.Text;

public class MyViewModel
{
    [JsonIgnore]
    public string SerializedSelf
    {
        get
        {
            return JsonConvert.SerializeObject(this);
        }
        set
        {
            if (string.IsNullOrWhiteSpace(value)) return;

            string json = value;
            MyViewModel copy = JsonConvert.DeserializeObject<MyViewModel>(json);
            if (Message == null) Message = copy.Message;
            if (Phone == null) Phone = copy.Phone;
            // ...
        }
    }

    public string Message { get; set; }
    public string Phone { get; set; }
    // ...

}

다음의 차이점은 무엇입니까?

@Html.HiddenFor(model => model.SerializedSelf)

@Model.SerializedSelf

전자가 부정확하게 만드는 원인은 무엇입니까?

업데이트 2013/12/5 : 나는 이것이 영향을 미치는지 테스트하기 위해 적절한 시간에 로직을 제거 SerializedSelf하고 명시 적으로 직렬화 / 역 직렬화합니다 SerializedSelf. 영향이 없으며 위에서 설명한대로 동작합니다.

업데이트 2013/12/5 : HTML 인코딩 및 디코딩이 제거되었습니다. 이전의 문제 해결 시도에서 남았습니다.

업데이트 2013/12/5 : 오늘이 문제를 살펴볼 시간이 없지만 [JsonIgnore]속성의 SerializedSelf속성이 범인이고 MVC 프레임 워크의 무언가를 방해하고 있다는 생각 이 들었습니다 . 가능한 한 빨리 조사하고 업데이트하겠습니다.

Ufuk Hacıoğulları

POST 요청에 대한 응답으로 뷰를 렌더링 한 후에 이런 일이 발생하면 HTML 도우미가 유효성 검사 오류가 있다고 생각하기 때문에 이전 값을 사용한다는 점을 알고 있어야합니다. 블로그 게시물 에서 자세한 설명을 찾을 수 있습니다 .

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관