2010-04-14 28 views
1

1)比方說,我有這種形式:什麼類型的對象可以被送回使用Html.Hidden()的操作方法

<% Using(Html.BeginForm()) { %> 
<%= Html.Hidden("myObject", 
        (cast to the appropriate type)ViewData["KeyForMyObject"] %>  
<input type = "submit" "Submit Object"> 
<% } %> 

2)這裏是其中的應該攔截價值的行動對象

public ActionResult MyAction(Type myObject) 
{ 
    //Do Something with the object 
} 

我的問題是:隱藏字段可以支持什麼類型的對象?

事實上,當計算機[ 「KeyForMyObject」]包含一個字符串,int或布爾,myAction能夠檢索該值。

但是,當涉及到對象,如列表字典,沒有任何反應。當我調試以檢查本地值時,我看到空值爲在MyMethod中鍵入myObject

那麼當涉及到List或Dictionary時,MVC中的規則是什麼?


編輯

爲了讓事情變得更簡單,我能寫這樣的事情

<%= Html.Hidden("contactDic", (Dictionary<string, string>)ViewData["contacts"]) %> 

,並期望檢索操作方法的字典是這樣

public ActionResult myMethod(Dictionary<string, string> contactDic) 
{ 
    // Do something with the dictionary 
} 

感謝幫助

回答

0

目前的問題是我問過的很多問題之一。他們都有一個共同點:我試圖保持我的數據狀態(多步/嚮導,如應用程序)。所以我試圖使用諸如ModelState.Clear()等語句來粗暴地清除ViewData的內容。

現在我意識到我正在與ViewData應該工作的方式(e.i. MVC本身)作鬥爭。總之,爲了保持我的對象的狀態,我需要序列化/反序列化對象。

我找到的最好的樣品是多步向導p.396-406 「臨ASP.NET MVC /史蒂夫·桑德森/ Apress的

另見how to stimulate a ViewState

看起來我只是在不知道如何表達自己的情況下發現了我正在尋找的東西。

謝謝

相關問題