2013-03-27 23 views
1

在我看來,我有:EditorFor在viewModel中將值傳遞給POST控制器,但DisplayFor和HiddenFor不?

@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」包含發件人的空值。 DisplayFor同樣。我怎樣才能讓HiddenFor工作?

+0

'DisplayFor'不寫出的輸入元件,所以其值將不會在POST中。這不是它的目的。至於'HiddenFor',Model.Sender'確實有價值嗎?你能否檢查隱藏字段是否在你的標記(瀏覽器內)中呈現出來,以及它是否有價值? – 2013-03-27 18:39:25

+0

啊,好的。我剛剛檢查過,當我使用HiddenFor時,它正在渲染髮件人。 vm確實包含具有EditorFor()的其他屬性,但vm.Sender爲null。 – SB2055 2013-03-27 18:43:44

+0

@AntP - 回覆以上 – SB2055 2013-03-27 18:45:10

回答

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); 
    } 
} 
+0

明白了!非常感謝螞蟻:) – SB2055 2013-03-27 19:48:25

相關問題