我需要从表单中获取一个模型的元素数组。然后将相同的数组返回到shape。型号:
public class Check
{
public int Id { get; set; }
public string Text { get; set; }
public int Number1 {get; set;}
public int Number2 {get; set;}
}
控制器:
[HttpGet]
public IActionResult Check(string tema)
{
IEnumerable<Check> less = _context.Checks.Where(e => e.Text == tema);
return View(less);
}
[HttpPost]
public IActionResult Check(IEnumerable<Check> Checks)
{
return View(Checks);
}
形式:
@model IEnumerable<Check>
@foreach (var check in Model)
{
<form asp-action="Check" asp-controller="Home" method="post">
<p>@check?.Text</p>
<p><input type="text"asp-for="@check.Number1"/></p>
@if(Number1 == Number2)
{<p>ok</p>}
<div class="form-group">
<input type="submit" value="Ok" class="btn btn-default" />
</div>
</form>
}
我让所有的东西都为一个模型工作,如果我传递一个数组,我会得到一个空表单。如何修复它?
1.如果您只想发布单个模型,但后端希望接收IEnumerable<Check>
,则需要添加名称属性(name="[0].propertyName"
(来覆盖asp-for
生成的name="check.propertyName"
2.对于您的代码,它将通过提交按钮生成多个表单。若要发布数组模型,需要将<form>
和submit按钮移动到foreach循环之外。
3.如果将阵列模型从视图发布到控制器。IEnumerable<Check> Checks
是一个列表模型,因此模型绑定系统将通过[i].propertyName
找到名称。
4.<p>
元素文本无法通过表单提交传递到后端。如果你想发布它,试着添加一个隐藏的输入。
如果将阵列模型从视图发布到控制器,请更改您的视图,如下所示:
@model IEnumerable<Check>
@{
int i=0; //add this...
}
<form asp-action="Check" asp-controller="Home" method="post">
@foreach (var check in Model)
{
<p>
@check?.Text
<input type="text"asp-for="@check.Text" name="[@i].Text" hidden/> @* //add the hidden input*@
</p>
//add the name...
<p><input type="text"asp-for="@check.Number1" name="[@i].Number1"/></p>
@if(check.Number1 == check.Number2)
{<p>ok</p>}
i++; //add this...
}
<div class="form-group">
<input type="submit" value="Ok" class="btn btn-default" />
</div>
</form>
如果您发布单个模型,请更改您的视图,如下所示:
@foreach (var check in Model)
{
<form asp-action="Check " asp-controller="Home" method="post">
<p>
@check?.Text
<input type="text"asp-for="@check.Text" name="[0].Text" hidden/> @* //add the hidden input*@
</p>
@*add the name...*@
<p><input type="text"asp-for="@check.Number1" name="[0].Number1"/></p>
@if(check.Number1 == check.Number2)
{<p>ok</p>}
<div class="form-group">
<input type="submit" value="Ok" class="btn btn-default" />
</div>
</form>
}