【问题标题】:EditorFor passes value to POST controller in viewModel, but DisplayFor and HiddenFor don't?EditorFor 将值传递给 viewModel 中的 POST 控制器,但 DisplayFor 和 HiddenFor 没有?
【发布时间】:2013-03-27 18:35:57
【问题描述】:

在我看来,我有:

@Html.EditorFor(m => m.Contact, new{style="width: 650px"})

控制器:

[HttpGet]
        public ActionResult Backflip()
        {
            // TODO: Make sure name is what we expect
            var contact = getContact();
            return View(new BackflipViewModel(contact));
        }

 [HttpPost]
    public ActionResult Broadcast(BackflipViewModel vm)
    {...

视图模型:

public class BackflipViewModel
{

    public BackflipViewModel()
    {
    }

    public BackflipViewModel(Contact contact)
    {
        Sender = contact;
    }

    public Contact Sender { get; set; }

}

我真的只是想要一个 hiddenFor,但如果我尝试 @Html.HiddenFor(m => m.Sender),我的 POST 控制器方法中的“vm”包含一个用于 Sender 的空值。 DisplayFor 也一样。我怎样才能让 HiddenFor 工作?

【问题讨论】:

  • DisplayFor 不会写出输入元素,因此其值不会出现在 POST 中。这不是它的目的。至于HiddenForModel.Sender 肯定有价值吗?您能否检查隐藏字段是否在您的标记(浏览器内)中呈现出来以及它是否具有值?
  • 啊,好的。我刚刚检查过,当我使用 HiddenFor 时它正在渲染发件人。 vm 确实包含具有 EditorFor() 的其他属性,但 vm.Sender 为空。
  • @AntP - 以上回应

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4


【解决方案1】:

这是因为 HiddenFor - 与 EditorFor 不同 - 无法为复杂对象生成完整的字段集。

您应该改为执行以下操作。

查看模型

public string SenderId { get; set; }

查看

@Html.HiddenFor(m => m.SenderId)

控制器

[HttpPost]
public ActionResult Broadcast(BackflipViewModel vm)
{
    If (ModelState.IsValid)
    {
        Sender sender = getContact(Model.SenderId);
    }
}

【讨论】:

  • 知道了!非常感谢蚂蚁 :)
猜你喜欢
  • 2016-12-20
  • 2019-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多