Asp.net mvc EditorFor将值传递给viewModel中的POST控制器,但DisplayFor和HiddenFor don';T
我认为:Asp.net mvc EditorFor将值传递给viewModel中的POST控制器,但DisplayFor和HiddenFor don';T,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,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(
@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 controller方法中的“vm”包含一个针对Sender的空值。同样适用于DisplayFor。我怎样才能躲藏起来工作 这是因为
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);
}
}
DisplayFor
不会写出输入元素,因此其值不会出现在POST中。这不是它的目的。至于HiddenFor
,Model.Sender
肯定有值吗?能否检查隐藏字段是否在标记(在浏览器中)中呈现,以及它是否有值?啊,好的。我刚刚检查过,当我使用HiddenFor时,它正在呈现Sender。vm确实包含其他具有EditorFor()的属性,但vm.Sender为null。@AntP-response得到了它!非常感谢蚂蚁:)