EditorFor在viewModel中将值传递给POST控制器,但是DisplayFor和HiddenFor没有?

时间:2013-03-27 18:35:58

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

在我看来,我有:

@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)
    {...

viewModel:

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工作?

1 个答案:

答案 0 :(得分:2)

这是因为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);
    }
}