用于将数据传递给控制器​​的隐藏输入

时间:2015-05-22 17:03:05

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

我试图将已传递给视图的模型再次传递给控制器​​。是否可以使用隐藏属性?

!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>

这可能吗?

2 个答案:

答案 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,如果您不希望用户更改数据,您应该使用缓存。