Мой вопрос очень похож на this one. Приложение, которое я разрабатываю, написано в 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; }
}
My View подобен ниже.
@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
, который является нулевым.
Любая помощь будет оценена, и если вы хотите получить больше информации о проблеме, я имею или код, я использую, пожалуйста, не стесняйтесь спрашивать.
Спасибо за вашу помощь Дарин, часть 1 моей проблемы была решена! Что касается префиксов полей ввода, то предоставленное вами решение работает, однако это означает, что если я верну представление и предоставил ему обновленную модель, все поля FirstName получат значение, которое я ввел вместо одной формы I отредактирован. (Я надеюсь, что я достаточно хорошо себя чувствую, чтобы его понимали.) – Geekatron
Я решил проблему, используя RedirectToAction («Index») вместо возврата View («Index», model). Спасибо Дарин! – Geekatron