1

这个问题以前有人问过,但还是不明白。我正在使用 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");
4

1 回答 1

8

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

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

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

于 2013-08-26T16:17:49.577 回答