我试图将已传递给视图的模型再次传递给控制器。是否可以使用隐藏属性?
!1
在我的控制器中;
@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>
这可能吗?
答案 0 :(得分:1)
您可以遍历视图模型的属性并为每个属性渲染一个隐藏的输入元素:
@foreach(var property in ViewData.ModelMetadata.Properties)
{
@Html.Hidden(property.PropertyName)
}
答案 1 :(得分: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,并将其作为单个字符串传递给您的视图到隐藏字段。反序列化返回控制器。 IMO,如果您不希望用户更改数据,您应该使用缓存。