Пустое перечисление в методе post
У меня есть такая точка зрения
@model IEnumerable<ViewModelRound2>
... <snip> ...
@{
using (Html.BeginForm(new { round1Ring3Bids = Model }))
{
if (Model != null && Model.Count() > 0)
{
... <snip> ...
@for (var x = 0; x < Model.Count(); x++)
{
ViewModelRound2 viewModelRound2 = Model.ElementAt(x);
Bid bid = viewModelRound2.Bid;
string userName = @bid.User.Invitation.Where(i => i.AuctionId == bid.Lot.Lot_Auction_ID).First().User.User_Username;
<tr>
<td>
@userName
</td>
<td>
@bid.Bid_Value
</td>
<td>
@Html.EditorFor(c => c.ElementAt(x).SelectedForRound2)
</td>
</tr>
}
</table>
<div class="buttonwrapper2">
<input type="submit" value="Select"/>
</div>
}
}
}
У меня есть метод записи, который идет, когда нажата кнопка отправки
[HttpPost]
public ActionResult Round2Manager(IEnumerable<ViewModelRound2> round1Ring3Bids)
Проблема в том, что перечисление всегда пусто. Почему это?
1 ответ
Проблема в том, что перечисление всегда пусто. Почему это?
Потому что вы не соблюдаете формат проводника, который по умолчанию для связывания моделей ожидает связывание коллекций.
Следующие:
@Html.EditorFor(c => c.ElementAt(x).SelectedForRound2)
генерирует абсолютно неправильные имена для ваших полей ввода.
Я бы порекомендовал вам использовать шаблоны редактора, чтобы избежать подобных проблем:
@model IEnumerable<ViewModelRound2>
@using (Html.BeginForm())
{
if (Model != null && Model.Count() > 0)
{
<table>
@Html.EditorForModel()
</table>
<div class="buttonwrapper2">
<input type="submit" value="Select"/>
</div>
}
}
а затем определить пользовательский шаблон редактора для ViewModelRound2
тип (~/View/Shared/EditorTemplates/ViewModelRound2.cshtml
), который будет автоматически отображаться для каждого элемента этой коллекции:
@model ViewModelRound2
@ {
string userName = Model.Bid.User.Invitation.Where(
i => i.AuctionId == Model.Bid.Lot.Lot_Auction_ID
).First().User.User_Username;
}
<tr>
<td>
@userName
</td>
<td>
@Model.Bid.Bid_Value
</td>
<td>
@Html.EditorFor(c => c.SelectedForRound2)
</td>
</tr>
Теперь вы заметите, как поля ввода текста имеют правильные имена:
name="[0].SelectedForRound2"
name="[1].SelectedForRound2"
name="[2].SelectedForRound2"
...
Сравните это с вашими начальными значениями.