2013-08-01 2 views
0

"임베디드 리소스"보기가 있습니다. 내가 @Html.Partial를 사용할 때 폼이 때 CustomModel1이 (조치에 전달하기 때문에이보기에 나는이 관점에서 다음과 같은 모델"컨텐츠"보기를 "임베디드 리소스"보기의 EditorFor 템플릿으로 사용

public class TestModel 
{ 
    public TestModel() 
    { 
     CustomModel1 = new CustomModel1(); 
     CustomModel2 = new CustomModel2(); 
    } 

    public CustomModel1 CustomModel1 { get; set; } 

    public CustomModel2 CustomModel2{ get; set; } 
} 

를 사용하고, 나는 양식을 가지고 있고 그 안에 내가 @Html.EditorFor 대신 @Html.Partial을 사용하고 있습니다 제출 됨)은 비어 있습니다. 나는 "콘텐츠"를 설정하면

The model item passed into the dictionary is null, but this dictionary requires a non-null model item of type 'System.Int32'.

보기 : 그러나 내가 템플릿으로

@Html.EditorFor(m => m.CustomModel1, "~/Views/Common/_CustomPartialView.cshtml") 

나는 다음과 같은 오류를 얻을 "콘텐츠"보기를 @Html.EditorFor를 사용하여 통과

@Html.EditorFor(m => m.CustomModel1, Constants.CustomEmbeddedView1) 

"임베디드 리소스"가되는 것이 좋습니다.

이 문제를 해결할 방법이 있습니까? 아마도 @Html.EditorFor을 사용하는 대신 모델 바인딩 문제에 대한 또 다른 해결책이있을 수 있습니다.

답변

1

문제점에 대한 해결책을 찾았습니다. 오류가 발생하는 이유는 아직도 모르지만 적어도 모델 바인딩을 수정했습니다. 모델 바인딩

문제는, 당신이 dispayed하는 @Html.Partial

@Html.Partial("~/Views/Common/_CustomPartialView.cshtml", Model.CustomModel1) 

요소를 호출 할 때 (나는 부분보기에, 예를 들어 @Html.EditorFor(m => m.Name)를 사용)를 id="Name"을 가지고있다. 따라서 모델 바인딩은 TestModel 안에 "Name"속성을 찾으려고 시도하지만 name 속성은 CustomModel1 속성 안에 있습니다. 이 때문에 모델 바인딩이 작동하지 않으며 양식을 제출할 때 Name 속성은 빈 문자열입니다.

해결 방법은 HtmlFieldPrefix를 설정하는 것입니다.

var dataDictCustomModel1 = new ViewDataDictionary { TemplateInfo = { HtmlFieldPrefix = "CustomModel1" } }; 
@Html.Partial("~/Views/Common/_CustomPartialView.cshtml", Model.CustomModel1, dataDictCustomModel1) 

Name 속성의 ID가 id="CustomModel1_Name"하게이 방법은, 따라서 모델 바인더가 제대로 이름 속성 값을 설정할 수.

더 나은 해결책이있을 수 있지만 지금까지 내가 생각해 낸 최고입니다.