【发布时间】:2015-01-13 13:53:51
【问题描述】:
我有一个 viewmodel,有两个属性,一个是 POCO 类,另一个是 double,当控制器构建并发送 viewmodel 时,所有值都存在并在页面上工作。当我发布视图模型时,设置了双精度值,并且对象存在,但里面的 POCO 类为空,而发送对象时则不是。
在下面的示例中,为什么 POSTed viewmodel 对象上的 ticket.flight 为 null?
视图模型:
public class PayViewModel
{
public virtual Ticket ticket { get; set; }
public double amountToPay = 0.0;
[Display(Name = "Amount To Pay")]
[DataType(DataType.Currency)]
[DisplayFormat(DataFormatString = "{0:N2}", ApplyFormatInEditMode = true)]
public double AmountToPay
{
get
{
return amountToPay;
}
set
{
amountToPay = value;
}
}
}
控制器方法:
// GET: Tickets/Pay/5
public ActionResult Pay(int? id)
{
if (id == null)
{
return RedirectToAction("Index");
}
Ticket ticket = db.tickets.Find(id);
if (ticket == null)
{
return RedirectToAction("Index");
}
PayViewModel viewModel = new PayViewModel();
viewModel.ticket = ticket;
return View(viewModel);
}
// POST: Tickets/Pay/5
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Pay([Bind(Include = "AmountToPay,ticket,ticket.flight")]PayViewModel viewModel)
{
if (ModelState.IsValid)
{
viewModel.ticket.AmountPaid += viewModel.AmountToPay;
if (viewModel.ticket.AmountPaid >= viewModel.ticket.flight.ticketPrice)
{
viewModel.ticket.status = TicketStatusType.CONFIRMED;
}
db.Entry(viewModel.ticket).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(viewModel.ticket);
}
查看代码-https://gist.github.com/JonFriesen/f511a91b8e9a90c1b23c
【问题讨论】:
-
能否也添加查看代码?
-
@dotnetom 在 GitHub GIST 中添加了指向视图代码的链接(出于某种原因,StackOverflow 不允许我发布它)。感谢您的回复
-
删除
[Bind(Include = "AmountToPay,ticket,ticket.flight")]位。当你这样做时会发生什么?
标签: c# asp.net-mvc viewmodel