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

use*_*645 1 viewmodel razor asp.net-mvc-3

这个问题之前已被其他人提出过,但仍然没有得到它.我正在使用MVC3 Razor,我有屏幕输入故障单.输入数据(textarea note)后,控制器将重定向回同一屏幕.大多数数据仅供显示.如果我使用DisplayFor或DisplayTextFor,则不会回发数据.我使用过HiddenFor.这样可行.但是,我一直听到别人说HiddenFor不理想.我不想编辑因为,我想轻松禁用该字段.(我跟着工作说HiddenFor错了,但不会说原因.:<lol)

剃刀

@Html.DisplayTextFor(m => m.Ticket.Name)
Run Code Online (Sandbox Code Playgroud)

视图模型

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

Control
        [HttpPost]
        public ActionResult Detail(TicketDetailsViewModel viewModel)
        return RedirectToAction("Detail");
Run Code Online (Sandbox Code Playgroud)

And*_*ndy 8

只有属于输入或其他表单控件的值才会回发到客户端.DisplayFor仅用于模型显示其数据,没有别的.

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

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