2013-07-22 70 views
3

我有這樣複雜的模型:如何將模型序列化爲隱藏字段?

public class MyModel 
{ 
    public SubModel SubModel1 {get;set;} 
    public SubModel SubModel2 {get;set;} 
    public SubModel SubModel3 {get;set;} 
} 

public class SubModel 
{ 
    public int Field1 {get;set;} 
    public string Field2 {get;set;} 
} 

取決於某些情況下,在我需要實現的下一個邏輯視圖:

@Html.EditorFor(m=>m.SubModel1); 
@Html.HiddenFor(m=>m.SubModel2); 
@Html.HiddenFor(m=>m.SubModel3); 

我的問題是Html.HiddenFor()僅適用於單一值,不適用於模型。那麼是否有方法將模型(或部分)序列化爲隱藏字段?

+0

使用這可能你把每一個在它自己的DIV,像''

@Html.EditorFor(m=>m.SubModel1)
,然後用javascript顯示/隱藏你需要的那個? – Alden

+0

我會XML使用它的子模型序列化整個模型,然後在將序列化的字符串存儲在隱藏字段之前對其進行加密。你做相反的事情,以獲得原始模型。 – jac

回答

0

不知道這是否會解決您的問題,它只是一個想法,我有我的代表不會讓我評論。

如何爲每個子模型的創建自定義模板編輯:How to create custom editor/display templates in ASP.NET MVC 3?

然後,您可以創建單獨的隱藏了從您的子模型中的每個屬性自定義模板內部控制。

0

嗚嗚......如果你想通過這種方式,可以考慮進行序列化,而不是試圖序列化到隱藏在輸入這個模型的JavaScript。 Take a look at this。這是模型序列化到腳本的一個很好的例子。

另一種方法:如果該模型包含的數據用戶最終會看到,也許你應該考慮將其存儲在一個視圖,然後繼續隱藏,直到露面時的觀點。在這種特殊情況下,如果僅在用戶請求時才使用ajax向服務器請求模型,則更好。

另一種方法:你可以在頁面打開和負載的動作在裏面裝載避免這個子模型被觸發後。


我不是說你需要,而只是備案,你可以探索在服務器短時間內保持數據的另一種形式:TempData, ViewData and ViewBag

希望這些方法之一可能是任何幫助。

0

您似乎沒有能夠創建自己的自定義模板HiddenFor像您可以爲EditorFor,所以我只是想創建自己的局部模板,然後用它。

在視圖中創建一個文件/共享/ HiddenSubModel.cshtml

@model SubModel 

@Html.HiddenFor(m=>m.Field1) 
@Html.HiddenFor(m=>m.Field2) 

然後在調用頁面

@Html.EditorFor(m=>m.SubModel1); 
@Html.Partial("HiddenSubModel", Model.SubModel2) 
@Html.Partial("HiddenSubModel", Model.SubModel3)