2013-07-22 32 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)