Связывание в ASPNET MVC CORE работает с @for, но не с @foreach [duplicate]

Теперь вы можете сделать это с помощью приложения GitHub Desktop .

После запуска приложения

  1. Нажмите проект, содержащий ветку
  2. Переключиться на ветвь, которую вы хотите удалить
  3. В меню «Ветка» выберите «Отменить публикацию ...», чтобы удалить ветвь с серверов GitHub.
  4. В меню «Ветка» выберите «Удалить» имя_издателя «...», чтобы ветвь удалилась с вашей локальной машины (ака машина, над которой вы сейчас работаете)

7
задан Lars Holdgaard 26 March 2013 в 13:55
поделиться

2 ответа

В основном проблема заключается в том, что связующее устройство по умолчанию не может правильно привязать элементы коллекции в цикле foreach. Другими словами, он неправильно называет элемент, и поэтому коллекция отображается как нуль в параметрах.

Я уверен, что есть разные способы обхода, помощники и прочее, но я не знаком с этими , поэтому я просто использую for loop вместо foreach, таким образом, элементы называются правильно.

Попробуйте это:

    @for (int i = 0; i < Model.Contributor.Count(); i++)
    {

        @Html.HiddenFor(model => Model.Contributor[i].Id)

        <div class="formrow">
            @Html.ValidationSummary(true)
        </div>

        <h2>@Html.TextRaw("AuthorInfo", "Author")</h2>
        <div class="formrow">

            @Html.EditorFor(model => Model.Contributor[i].FirstName)
            <div class="formvalidation">
                @Html.ValidationMessageFor(model => Model.Contributor[i].FirstName)
            </div>
        </div>


        <div class="formrow right">
            <input type="hidden" name="formsubmitted" value="true" />
            <input type="submit"  class="button" value="@Html.Text("ButtonText", "Save")" />
        </div>
    }

Я предлагаю вам использовать инструмент отладки, чтобы узнать, элементы имеют правильный атрибут имени, в вашем случае они должны выглядеть как Contributor [0] .Id, Contributor [0] .FirstName и т. д.

15
ответ дан Tomi Lammi 26 August 2018 в 11:10
поделиться

Вы можете использовать Partial View для объекта Contributor. Частичный вид:

@model Contributor
using (Html.BeginForm("ContributorUpdate", "YourController"))
{
  @Html.HiddenFor(model => Model.Id)
  <div class="formrow">
    @Html.ValidationSummary(true)
  </div>

  <h2>@Html.TextRaw("AuthorInfo", "Author")</h2>
  <div class="formrow">

   @Html.EditorFor(model => Model.FirstName)
   <div class="formvalidation">
        @Html.ValidationMessageFor(model => Model.FirstName)
   </div>
</div>
<div class="formrow right">
   <input type="hidden" name="formsubmitted" value="true" />
   <input type="submit"  class="button" value="@Html.Text("ButtonText", "Save")" />
</div>
}

Вид будет:

@foreach (var contributor in Model.Contributor)
{
   @{Html.RenderPartial("Conributor", contributor);}
}

И код контроллера:

[HttpPost]
public ActionResult Mine(Conributor conributor, string newuser)
{
    //
}
5
ответ дан user571874 26 August 2018 в 11:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: