У меня есть модель вида:
public class OrganisationViewModel
{
public string OrganisationName { get; set; }
public List<BranchViewModel> Branches { get; set; }
// more properties...
}
public class BranchViewModel
{
public string BranchName { get; set; }
// more properties...
}
Вот как выглядит страница организации:
Что Я хочу добиться того, чтобы пользователь мог обновить один BranchViewModel
, поэтому я создал модал для каждой ветви, и когда пользователь нажмет на ссылку «Изменить ветку», откроется модальное окно:
@for (int i = 0; i < Model.BranchViewModels.Count(); i++)
{
var branchModalId = OrganisationHelper.GetBranchModalId(Model.BranchViewModels[i].BranchId);
<div class="modal fade" id="@branchModalId" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<form action="/organisation/updateBranch" method="post" role="form">
<div class="modal-body">
@Html.AntiForgeryToken()
<div class="form">
<div class="form-group">
@Html.LabelFor(m => Model.BranchViewModels[i].BranchName, htmlAttributes: new { @class = "", @maxlength = GlobalConstants.MaxLengthForLongName })
@Html.TextBoxFor(m => Model.BranchViewModels[i].BranchName, new { @class = "form-control input-text" })
@Html.ValidationMessageFor(m => Model.BranchViewModels[i].BranchName, "", new { @class = "text-danger" })
</div>
@*more properties...*@
</div>
</div>
<div class="modal-footer">
<input type="button" value="Cancel" class="btn btn-secondary-grey" data-dismiss="modal" />
<input type="submit" class="btn btn-primary-action" value="Save" />
</div>
</form>
</div>
</div>
</div>
}
Теперь проблема в том, что, поскольку ветви принадлежат массиву, входные данные на странице генерируются как массив, так что-то вроде этого:
<input class="form-control input-text" data-val="true" id="BranchViewModels_0__BranchName" name="BranchViewModels[0].BranchName" readonly="readonly" type="text" value="35671900246">
Поэтому, когда я отправляю изменения в ветку, значения передаются в контроллер как List
, так что этот контроллер будет принимать список из одной ветви:
public ActionResult UpdateBranch(List<BranchViewModel> branchViewModel)
{
}
То, чего я хочу достичь, - это быть возможность передать одну ветвь контроллеру, поэтому я хочу, чтобы сигнатура контроллера была такой:
public ActionResult UpdateBranch(BranchViewModel branchViewModel)
{
}
Но мне нужно, чтобы ветвь отображалась как массив в HTML, в противном случае я получит дублированные идентификаторы ввода ... каков наилучший способ добиться этого?