【问题标题】:DisplayFor is not keeping data in ViewModel on PostBackDisplayFor 不在 PostBack 上的 ViewModel 中保留数据
【发布时间】:2013-08-26 16:01:56
【问题描述】:

这个问题以前有人问过,但还是不明白。 我正在使用 MVC3 Razor,并且有输入故障单的屏幕。 输入数据(文本区域注释)后,控制器将重定向回同一屏幕。 大部分数据仅供展示。如果我使用 DisplayFor 或 DisplayTextFor,数据 没有被发回。我用过HiddenFor。这样可行。然而,我一直听到 其他人认为 HiddenFor 并不理想。我不想编辑,因为我想轻松禁用该字段。 (我跟着工作说 HiddenFor 是错的,但不会说为什么。:

剃须刀

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

视图模型

    public class TicketDetailsViewModel
    {
        [DisplayName("Customer Name")]
        public string Name { get; set; }

Control
        [HttpPost]
        public ActionResult Detail(TicketDetailsViewModel viewModel)
        return RedirectToAction("Detail");

【问题讨论】:

    标签: asp.net-mvc-3 razor viewmodel


    【解决方案1】:

    只有属于输入或其他表单控件的值才会回传给客户端。 DisplayFor 仅用于模型显示其数据,仅此而已。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-05
      • 2011-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多