내 뷰 모델 클래스에는 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 프레임 워크의 무언가를 방해하고 있다는 생각 이 들었습니다 . 가능한 한 빨리 조사하고 업데이트하겠습니다.
POST 요청에 대한 응답으로 뷰를 렌더링 한 후에 이런 일이 발생하면 HTML 도우미가 유효성 검사 오류가 있다고 생각하기 때문에 이전 값을 사용한다는 점을 알고 있어야합니다. 이 블로그 게시물 에서 자세한 설명을 찾을 수 있습니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다