2014-08-21 3 views
0

을 다시 게시 모델을 깨는 나는 다음 뷰 모델이 : 나는 다음 DataSyncOptions을 통해 루프 내보기에 일부 텍스트 상자를 나열수동으로 생성 된 입력 값

public class DataSyncViewModel 
{ 
    public ConfigurableDataSyncOptions DataSyncOptions { get; set; } 
    public int Id { get; set; } 
    public string SystemName { get; set; } 
} 

을 :

@if (@Model.DataSyncOptions != null) 
{ 
    if (Model.DataSyncOptions.TextConfigurableOptions != null) 
    { 
     for (int i = 0; i < Model.DataSyncOptions.TextConfigurableOptions.Count; i++) 
     { 
      <div class="span6"> 
       <h4>@Model.DataSyncOptions.TextConfigurableOptions[i].OptionText?</h4> 
       <p> 
        @Html.EditorFor(m => Model.DataSyncOptions.TextConfigurableOptions[i].OptionValue) 
       </p> 
       @Html.HiddenFor(m => Model.DataSyncOptions.TextConfigurableOptions[i].OptionName) 
      </div> 
     } 
    } 
} 
@Html.HiddenFor(m => m.Id) 
@Html.HiddenFor(m => m.SystemName) 

이 작동 때 양식이 다시 게시되면 내 컨트롤러에서 SystemNameId에 액세스 할 수 있습니다. 그러나

, 내가

@if (Model.DataSyncOptions.TextConfigurableOptions[i].OptionType == "") 
{ 
    @Html.EditorFor(m => Model.DataSyncOptions.TextConfigurableOptions[i].OptionValue) 

} 
else 
{ 
    //This appears to be causing issues 
    <input type="@Model.DataSyncOptions.TextConfigurableOptions[i].OptionType" name="Model.DataSyncOptions.TextConfigurableOptions[@i].OptionValue" value="@Model.DataSyncOptions.TextConfigurableOptions[i].OptionValue" /> 
} 

내 값이 모델을 다시 게시 중지와

@Html.EditorFor(m => Model.DataSyncOptions.TextConfigurableOptions[i].OptionValue) 

을 대체합니다. 내 애플 리케이션의 플러그인 작성자가 수동으로 입력을 만드는 오전 추가 한 옵션의 입력 유형을 지정할 수 있도록 노력하고 있습니다.

입력 생성을 변경하면 포스트 백에서 모델 바인딩이 깨지는 이유는 무엇입니까? 우리는 @Model을 쓸 때 사실은 우리의보기가 강력하게 형식화되는 유형의 actualy 인스턴스에

<input type="@Model.DataSyncOptions.TextConfigurableOptions[i].OptionType" 
     name="DataSyncOptions.TextConfigurableOptions[@i].OptionValue" 
     value="@Model.DataSyncOptions.TextConfigurableOptions[i].OptionValue" /> 

을 대신 Model

답변

1

는 바인딩 DataSyncViewModel입니다 이름 속성에 모델 클래스 이름 쓰기 이 경우 모델은 면도기가 아닌 단순한 문자열이므로 모델으로 유지되며 이름은 입력과 다를 수 있으므로 게시물의 Model 속성에 바인딩되지 않습니다.

+0

글쎄, 놈. 이제 나는 어리 석다. 시간 내 줘서 고마워. 그것은 입력의 실제 가치를 게시했지만 나머지는 깨뜨리는 것처럼 나를 혼란스럽게 만들었습니다. – webnoob

+0

답변 마크를 제거해야했습니다. 코드로 입력 된 인라인을 변경하면이 입력 게시물의 값이 중지됩니다. 전에 제대로 게시했지만 다른 값은 중지되었습니다. 어떤 생각이 잘못 될 수 있습니까? – webnoob

+0

액션 메소드의 파라미터가'(DataSyncViewModel model)'인 경우,'name' 속성은'DataSyncOptions.TextConfigurableOptions [@i] .OptionValue' ('DataSyncViewModel.' 접두사를 없앱니다) –

관련 문제