在一个视图中,我在javascript中创建一个包含元素ID的数组,现在我想将它们传递到我的MVC模型中的模型字段中是否有人已经遇到过这种问题这是我的模型:
public class AppointmentModel
{
public int Id { get; set; }
public string Title { get; set; }
public int[] PersonsIds { get; set; }
public int[] CompaniesIds { get; set; }
}
并且在视图中我将两个数组保持为隐藏字段
@html.hiddenfor(model => model.PersonsIds)
@html.hiddenfor(model => model.CompaniesIds)
所以架构如下所示:
javascript->model->submit model->controller
请提供任何帮助
答案 0 :(得分:2)
假设您需要弄清楚如何启用模型回发,我就是这样做的。
当您在集合中绑定原始类型时,您只需添加与集合同名的输入,模型绑定器就会选择它们。
举个简单的例子,如果您的视图呈现以下内容:
<input type="hidden" name="PersonsIds" value="1" />
<input type="hidden" name="PersonsIds" value="4" />
这将以这样的方式发回:
PersonsIds=1&PersonsIds=4
模型绑定器将拾取它们并将它们转换为整数集合。
这是一个简单的例子,可以看到模拟绑定在虚拟数据中的操作,你只需要在回发之前用javascript渲染隐藏的值。
查看强>
@using (Html.BeginForm())
{
foreach(var personId in Model.PersonsIds)
{
@Html.Hidden("PersonsIds", personId)
}
<input type="submit" value="submit" >
}
<强>控制器强>
public ActionResult Index()
{
return View(new AppointmentModel { PersonsIds = new int[] { 1, 4 } });
}
[HttpPost]
public ActionResult Index(AppointmentModel model)
{
return View(model);
}
已填充的已发布数据
更新隐藏值的Javascript
<input type="text" id="IdToAdd" />
<button >Add</button>
<input type="hidden" name="PersonsIds" value="1" />
<input type="hidden" name="PersonsIds" value="4" />
<script>
$(function() {
$('button').click(function() {
$(this).after('<input type="hidden" name="PersonIds" value="' + $('#IdToAdd').val() + '" />');
});
});
</script>
<强> jsFiddle 强>
答案 1 :(得分:0)
@model AppointmentModel
@for(var i = 10; i < model.PersonsIds.Length; i++)
{<p>Line
@html.hiddenfor(model => model.PersonsIds[i])
</p>}
或者例如
@for (int i = 0; i < Model.Count; i++)
{
@Html.HiddenFor(x=>Model[i].Id) @Model[i].Name
@Html.TextBoxFor(x => Model[i].Quantity) <br/>
}