【发布时间】:2012-03-12 11:03:00
【问题描述】:
我的问题与this one 非常相似。我正在开发的应用程序是用 MVC 3 和 Razor 编写的。它允许其用户从商店中选择商品并将每件商品发送到不同的地址。
这是我的 ViewModel:
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)
我的意图是显示一组表单(购物车中的每个项目一个),以使用户能够输入不同的交付详细信息。每个表单都有自己的提交按钮。
呈现“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>不同),尽管我认为编辑器模板应该将索引附加到输入字段名称以启用正确的绑定。当单击确认并提交 To 列表中的第一个表单时,控制器会收到具有正确绑定的视图模型。提交以下任何表单(索引为 1 或更大)会调用 ConfirmTo 操作并传递一个为空的
ToDetailsViewModel。
我们将不胜感激,如果您想了解有关我遇到的问题或我正在使用的代码的更多信息,请随时询问。
【问题讨论】:
标签: c# asp.net-mvc-3 forms binding viewmodel