2011-01-31 43 views
6

嗨,ASP.NET MVC 2並列爲隱藏值?

我有一個包含列表的視圖類,這個列表解釋說,用戶已經上傳了可用的文件(用HTML輔助渲染)。

爲了保持對提交我加入這個數據下面的觀點:

<%: Html.HiddenFor(model => model.ModelView.Files)%> 

我希望在mode.ModelView.Files列表將返回到上提交的行動,但它是不是?

是不可能有一個列表爲hiddenfield?

更多信息:用戶提交一對夫婦被保存在服務,當保存大公被refered爲GUID,是這個名單被髮回給用戶呈現保存的圖像文件。用戶在表單中進行一些更改,然後再次提交提交時,圖像列表在獲取控件操作時將爲空,爲什麼?

BestRegards

回答

6

是沒可能有一個列表,hiddenfield?

當然,這是不可能的。隱藏字段只需要一個字符串值:

<input type="hidden" id="foo" name="foo" value="foo bar" /> 

所以如果你需要,你需要多個隱藏字段,列表中的每個項目的列表。如果這些項目是複雜的對象,則需要列表中每個項目的每個屬性都有一個隱藏字段。

或者更簡單的解決方案是爲這個隱藏字段代表的一些唯一標識符:

<input type="hidden" id="filesId" name="filesId" value="123" /> 

,並在你的控制器動作,你會使用這個唯一識別碼,無論你最初得到它重新獲取您的收藏。

還有一種可能性是將你的模型保存到Session(只是提及Session的完整性,但我不推薦使用它)。

+0

你爲什麼不推薦Session?在行動之間存儲數據的建議是什麼?我應該如何獲得唯一的標識符? – Banshee 2011-02-01 12:30:43

3

在我開始之前,我只想提一下,這是一個標記爲答案的建議解決方案之一。 Darrin說得對,這裏是一個實施建議解決方案的例子...

我有一個類似的問題,我需要在隱藏字段中存儲int類型的通用列表。我試過的標準應用是:

<%: Html.HiddenFor(foo => foo.ListOfIntegers) %> 

這會導致和異常。所以我嘗試了Darrin的建議並用上面的代碼替換了上面的代碼:

<% 
foreach(int fooInt in Model.ListOfIntegers) 
{ %> 
<%: Html.Hidden("ListOfIntegers", fooInt) %> 
<% } %> 

這對我來說就像是一種魅力。謝謝Darrin。