#asp.net-mvc-3 #viewmodel
#asp.net-mvc-3 #viewmodel
Вопрос:
Я изменил свой контроллер, чтобы передавать VoucherBatchViewModel вместо VoucherBatch
[HttpPost]
public ActionResult Edit(Guid id, VoucherBatchViewModel voucherBatchViewModel)
{
if (!ModelState.IsValid)
{
SetupDropDowns();
И виртуальная машина:
public class VoucherBatchViewModel
{
public VoucherBatch VoucherBatchInVM { get; set; }
public string CreationReference { get; set; }
public int NumberToMove { get; set; }
public int VoucherCodeLength { get; set; }
}
Вопрос: Почему мой ModelState недействителен? Выпадающий список не заполнил правильное поле в ViewModel. HTML выдает правильное
<div class="editor-field">
@Html.DropDownList("VoucherProviderId",
new SelectList(ViewBag.VoucherProviders as System.Collections.IEnumerable,
"Id", "Name", Model.VoucherBatchInVM.VoucherProviderId))
и Edit get содержит это, которое я использую для заполнения выпадающего списка.
ViewBag.VoucherProviders = uow.VoucherProviders.OrderBy(v => v.Name).ToList();
HTML:
<select id="VoucherProviderId" name="VoucherProviderId"><option value="0469f9ba-c4ea-401a-86f1-095208c6a7fb">Name</option>
<option selected="selected" value="e0aeed44-3574-46f1-a493-0a6a87948942">Voucher Provider 1</option>
<option value="5abe1158-282b-4330-9b11-01de503a2f16">Voucher Provider 2</option>
Ответ №1:
Не вижу никакого VoucherProviderId
свойства в вашем VoucherBatchViewModel
. Таким образом, ваш HTML недействителен. Это должно быть:
<select id="VoucherProviderId" name="VoucherBatchInVM.VoucherProviderId">
...
</select>
И для достижения этой разметки я бы рекомендовал вам использовать строго типизированные помощники:
@Html.DropDownListFor(
x => x.VoucherBatchInVM.VoucherProviderId,
new SelectList(ViewBag.VoucherProviders as System.Collections.IEnumerable, "Id", "Name")
)
И, пожалуйста, замените это, ViewBag
от которого меня тошнит, строго типизированным свойством model:
@Html.DropDownListFor(
x => x.VoucherBatchInVM.VoucherProviderId,
new SelectList(Model.VoucherProviders, "Id", "Name")
)
Комментарии:
1. отличная работа. Я смеялся, когда прочитал вашу любовь к ViewBag! Поэтому я изменил его на строго типизированный и буду использовать это в будущем 🙂