Теперь вы можете сделать это с помощью приложения GitHub Desktop .
После запуска приложения
В основном проблема заключается в том, что связующее устройство по умолчанию не может правильно привязать элементы коллекции в цикле 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 и т. д.
Вы можете использовать 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)
{
//
}