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

本文关键字:隐藏 输入 控制器 数据 | 更新日期: 2023-09-27 17:50:29

我试图传递模型,它已经传递给视图,再次传递给控制器。有可能使用隐藏属性吗?

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

in my controller;

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

这可能吗??

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

您需要使用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,并将其作为单个字符串传递到视图的隐藏字段。返回控制器时反序列化。在我看来,如果你不想让用户修改数据,你应该使用缓存。

您可以遍历视图模型的属性,并为每个属性呈现一个隐藏的输入元素:

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