2012-01-17 63 views
0

我有視圖模型與內部ViewModel地址propery。反序列化Html.Serialize介紹ViewModel

public class CommonViewModel{ 

public AddressViewModel PreviouslyAddress { get; set; } 

} 

和地址:

[Serializable] 
    public class AddressViewModel 
    { 
     public string Address1 { get; set; } 

     public string Address2 { get; set; } 

     public string City { get; set; } 

     public string Prefix { get; set; } 

     public string ZipCode { get; set; } 
} 

我想序列化,並在POST得到deseriliazed。

我用:

@Html.Serialize("PreviouslyAddress", Model.PreviouslyAddress) 

但在所有的例子,他們使用屬性DeserializeAttribute只能在方法的參數來實現。

enter link description here

EDITED

如何我可以不用創建自定義的岸堤,並把我的模型參數的一部分。

[HttpPost]    
public ActionResult Register([DeserializeAttribute] AddressViewModel user, FormCollection userForm) 
{ 
    TryUpdateModel(user, userForm.ToValueProvider()); 

例如,如果可能的話我想是這樣的:

[HttpPost]    
public ActionResult Register(CommonViewModel model) 
{ 
    TryUpdateModel(user, userForm.ToValueProvider()); 

public class CommonViewModel{ 

     [DeserializeAttribute] 
     public AddressViewModel PreviouslyAddress { get; set; } 

     } 

回答

3

您可以使用MvcSerializer類手動反序列化一些字符串對一個模型:

var serializer = new MvcSerializer(); 
var value = Request["previouslyAddress"]; // this is the contents of the hidden field 
var address = (AddressViewModel)serializer.Deserialize(value, SerializationMode.Signed); 
+0

剛今天,我看到一些ASP.MVC的問題。你已經回答了。我想說,感謝您使用ASP.MVC的工作。 我可以手動(我做:)),但我想使用ASP.NET defualt功能。但是我發現它不存在:( – 2012-01-17 13:58:50

+0

@IvanKorytin,你想使用哪些默認功能?你也可以使用'[Deserialize]'屬性來修飾你的動作參數,然後它會被自動反序列化。忘了這不是ASP.NET MVC內置的功能,它是MVCContrib項目的一部分,所以我想知道你正在尋找什麼樣的默認功能 – 2012-01-17 14:05:52

+0

對不起,我的意思是,例如,我應用[Deserialize ]屬性爲propery,我將去deserializy。有些人認爲我稱之爲「默認」。 – 2012-01-17 17:40:08