2015-05-22 45 views
0

我试图将传递给查看的模型再次传递给控制器​​。是否可以使用隐藏属性?将数据传递给控制器​​的隐藏输入

@model IEnumerable<MvcApp.ViewModel.PlanObjectsViewModel> 

<div> 
    @using (Html.BeginForm("planviewCreate", "plan",System.Web.Mvc.FormMethod.Post)) 
    { 


     @Html.HiddenFor(Model); 
    } 

    <input " type="submit" name="submit" id="submit" value="Submit" class="btn btn-info pull-right"> 

</div> 

在我的控制器;

public ActionResult planviewCreate(PlanObjectsViewModel model) 
{ 
    // some code here 
    return View(); 
} 

这可能吗?

+0

你问,不先尝试? –

回答

1

您将需要使用一个for循环和数组索引,以便它知道如何将数据映射回到你的控制器。

@model MvcApp.ViewModel.PlanObjectsViewModel[] 


@for(var i = 0; i < Model.Count(); i++) 
{ 
    @Html.HiddenFor(m => m[i].PropertyName1); 
    @Html.HiddenFor(m => m[i].PropertyName2); 
} 

控制器签名

[HttpPost] 
public ActionResult PlanviewCreate(PlanObjectsViewModel[] viewModel) //using model as the variable name will give undesired results. 

如果你有一个大模型,不希望每个属性地图,你可以序列化到XML或JSON并传递一个字符串到您的视图成一个隐藏的领域。反序列化返回到您的控制器。国际海事组织,如果你不希望数据被用户改变,你应该使用缓存。

1

可以遍历视图模型的属性和渲染每一个隐藏的输入元素:

@foreach(var property in ViewData.ModelMetadata.Properties) 
{ 
     @Html.Hidden(property.PropertyName) 
} 
相关问题