我有这样复杂的模型:
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 :(得分: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)