DisplayFor没有在PostBack上保留ViewModel中的数据



其他人以前也问过这个问题,但仍然没有得到。我正在使用MVC3 Razor,我有输入故障通知单的屏幕。一旦输入数据(文本区域注释),控制器将重定向回同一屏幕。大部分数据仅供显示。如果我使用DisplayFor或DisplayTextFor没有寄回。我用过HiddeFor。这很管用。然而,我一直听到其他人认为HiddeFor并不理想。我不想编辑,因为,我想很容易地禁用字段。(我关注工作,说HiddeFor错了,但不愿说明原因。:<lol)

Razor

@Html.DisplayTextFor(m => m.Ticket.Name)

ViewModel

    public class TicketDetailsViewModel
    {
        [DisplayName("Customer Name")]
        public string Name { get; set; }
Control
        [HttpPost]
        public ActionResult Detail(TicketDetailsViewModel viewModel)
        return RedirectToAction("Detail");

只有作为输入或其他表单控件一部分的值才会发布回客户端。DisplayFor只是为了让模型显示其数据,而不是其他。

您有两种选择;使用隐藏字段,以便每次都用数据填充模型,或者再次获取值。如果你的数据不敏感,前一种方法也可以,因为最终用户可以更改隐藏值并重新发布你的表单。因此,例如,你永远不想从客户端获得UnitPrice,因为即使在隐藏字段中,恶意用户也可以修改单价。在这种情况下,您总是希望自己重新加载数据并重新填充模型。

这也没什么错;如果数据是不可编辑的,并且您需要显示它,那么每次都需要获取它。我个人会谨慎行事,每次在服务器上重新读取只读数据,而不是将数据放入隐藏字段。

相关内容

  • 没有找到相关文章

最新更新