将数据传递给控制器的隐藏输入
本文关键字:隐藏 输入 控制器 数据 | 更新日期: 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)
}