如何将模型序列化为隐藏字段?

时间:2013-07-22 15:50:05

标签: c# asp.net-mvc-3 serialization hidden-field

我有这样复杂的模型:

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()仅适用于单个值,而不适用于模型。那么有没有方法将模型(或部分)序列化为隐藏字段?

3 个答案:

答案 0 :(得分:0)

不确定这是否能解决您的问题,这只是我的想法,我的代表不允许我发表评论。

如何为每个子模型创建自定义编辑器模板:How to create custom editor/display templates in ASP.NET MVC 3?

然后,您可以为自定义模板中的子模型中的每个属性创建单独的隐藏控件。

答案 1 :(得分:0)

哼......如果你想通过这种方式,你可以考虑将这个模型序列化为javascript,而不是试图序列化为隐藏的输入。 Take a look at this。这是脚本模型序列化的一个很好的例子。

另一种方法:如果此模型包含用户最终会看到的数据,也许您应该考虑将其存储在视图中,然后隐藏视图直到显示时间。在这种特殊情况下,如果您只能在用户请求时使用ajax向服务器请求模型,那就更好了。

另一种方法:您可以避免在页面打开期间加载此SubModel,并在触发后在操作内部加载。


我并不是说您需要,但只是为了记录,您可以在短时间内探索另一种在服务器中维护数据的形式:TempData, ViewData and ViewBag

希望其中一种方法可以提供任何帮助。

答案 2 :(得分:0)

您似乎无法像编辑器一样为HiddenFor创建自己的自定义模板,因此我只想创建您自己的部分模板然后使用它。

在Views / Shared / 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)