Мой вопрос очень похож на этот . Приложение, которое я разрабатываю, написано на MVC 3 и Razor. Он позволяет пользователям выбирать товары в магазине и отправлять каждый на другой адрес.
Вот мои ViewModels:
public class DeliveryDetailsViewModel
{
public FromDetailsViewModel From { get; set; }
public IList<ToDetailsViewModel> To { get; set; }
}
public class DetailsViewModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
}
public class FromDetailsViewModel : DetailsViewModel
{
public string StreetAddress { get; set; }
public string Suburb { get; set; }
public string Postcode { get; set; }
}
public class ToDetailsViewModel : DetailsViewModel
{
public string Message { get; set; }
}
Мой вид похож на ниже.
@model Store.ViewModels.DeliveryDetailsViewModel
@Html.EditorFor(m => m.From)
@Html.EditorFor(m => m.To)
Мое намерение состоит в том, чтобы отобразить коллекцию форм (по одной на товар в корзине), чтобы пользователь мог вводить различные детали доставки. Каждая форма имеет свою собственную кнопку отправки.
Шаблон редактора, который отображает форму «Кому», выглядит следующим образом:
@model Store.ViewModels.ToDetailsViewModel
@using (Html.BeginForm("ConfirmTo", "Delivery"))
{
@Html.TextBoxFor(m => m.FirstName)
@Html.TextBoxFor(m => m.LastName)
@Html.TextBoxFor(m => m.Email)
@Html.TextBoxFor(m => m.Message)
<input type="submit" value="Confirm" />
}
Мой контроллер:
public class DeliveryController : Controller
{
public ActionResult Index()
{
var model = new DeliveryDetailsViewModel();
model.From = new FromDetailsViewModel();
model.To = new List<ToDetailsViewModel>();
return View(model);
}
public ActionResult ConfirmTo(ToDetailsViewModel toDetails)
{
// Save to database.
}
}
У меня есть пара проблем:
Шаблон редактора "to" ничего не рендерит (хотя раньше). В нем говорится, что типы моделей не совпадают (т. Е. ToDetailsViewModel
не совпадает с List<ToDetailsViewModel>
), хотя я думал, что шаблоны редакторов должны были добавлять индексы к именам полей ввода, чтобы обеспечить правильное связывание.
При нажатии кнопки «Подтвердить» и отправке первой формы в списке «Кому» контроллер получает модель представления с правильными привязками. Отправка любой из следующих форм (с индексом 1 или выше) вызывает действие ConfirmTo и передает значение ToDetailsViewModel
, равное нулю.
Буду признателен за любую помощь, и если вам нужна дополнительная информация о проблеме, с которой я сталкиваюсь, или о коде, который я использую, не стесняйтесь спрашивать.