2015-07-17 3 views
0

Я пытаюсь использовать EditorFor для ввода значений в список в модели представления. Я не хочу, чтобы все элементы в списке разрешали редактирование. Метод определения того, какой элемент в списке можно редактировать, - это использовать дополнительный список в моей модели представления. Эти два списка идеально совпадают, так что i-я позиция одного списка точно соответствует i-ой позиции другой. Код выглядит следующим образом:РедакторДля отображения отлично, но не сохраняет соответственно

<div class="form-group"> 
     @Html.Label("Inputs", htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @for (int i = 0; i < Model.InputList.Count(); i++) 
      { 
       @Html.Label(i + 1 + ") " + Model.ProtocolSteps[i].Description) 
       if (Model.ProtocolSteps[i].InputNeeded.Value) 
       { 
        @Html.EditorFor(model => model.InputList[i], new { htmlAttributes = new { @class = "form-control" } }) 
       } 
       <br /> 
      } 
     </div> 
    </div> 

В списке ProtocolSteps определяется, должен ли отображаться шаблон editorfor. Если это необходимо, вход редактора будет сохранен в InputList. Этот код отлично работает без инструкции if (т. Е. Все значения хранятся в правильном месте в InputList). С помощью оператора if представление отображается отлично, но значения не сохраняются в InputList (обычно одно значение сохраняется в списке, но не все). Любая помощь приветствуется тем, почему утверждение if является бесполезным.

ответ

0

Редактировать

Взял этот автономный и мы обнаружили, что ASP.NET необходимо его всегда выписывают значение, так что добавление скрытое поле, кажется, работает. Но если кто-нибудь случится на этом посту, было бы неплохо, если бы вы могли объяснить, почему это требуется.

@Html.Label(i + 1 + ") " + Model.ProtocolSteps[i].Description) 
if (Model.ProtocolSteps[i].InputNeeded.Value) 
{ 
    @Html.EditorFor(model => model.InputList[i], new { htmlAttributes = new { @class = "form-control" } }) 
} 
else 
{ 
    @Html.HiddenFor(model => model.InputList[i]); 
} 

был просто смотреть майкрософт видео об этом, они сказали, что при использовании хелперов @Html в итерации, вам необходимо обратиться непосредственно к списку, а не значение, передаваемое в лямбда-выражения. Итак, попробуйте изменить:

@Html.EditorFor(i => Model.InputList[i], new { htmlAttributes = new { @class = "form-control" } }) 

EDIT Похоже, аналогичной проблемой здесь. How to use EditorFor inside a foreach

Я обновил свою предыдущую запись для соответствия, но я ее не тестировал. Похоже, другой парень действительно вызвал у него много упреков.

+0

Спасибо за ответ, но это ничего не изменило. Я все равно получаю тот же результат. Любые другие предложения? – Jon

+0

Отредактировал ответ, не уверен, почему он работает, но в соответствии с этим связанным вопросом. –

+0

Что делать, если вы перенесли метку в оператор if? –

Смежные вопросы