将对象列表绑定到表单
Bind List of objects to a form
我有 class 个 Signature
个对象:
public class Signature
{
public int SignatureID { get; set; }
public int FormID { get; set; }
public string Title { get; set; }
public string Email { get; set; }
[Display(Name = "Signed Date:")]
public DateTime? Date { get; set; }
}
我有一个 Form.cs
class 有一个虚拟签名列表
public virtual List<Signature> Signatures { get; set; }
在我的控制器中,我通过以下方式填充列表:
form.Signatures = repository.Signatures.Where(s => s.FormID == form.FormID).ToList();
在我的表单视图中,我显示了相关签名的列表:
@foreach (var signature in Model.Signatures)
{
<div class="text-center">
<label asp-for="@signature.Title"></label>
<input asp-for="@signature.Title" />
<label asp-for="@signature.Email"></label>
<input asp-for="@signature.Email" />
<label asp-for="@signature.Date"></label>
<input disabled asp-for="@signature.Date">
</div>
}
但是,我不知道如何根据我的 POST 表单方法更新关联的签名。例如,如果我更改签名的 Email
属性 和表单的 POST,模型不会将此更改绑定到 Form
对象。在这种情况下,form.Signatures
为空。
如何确保对与表单关联的 <List>Signature
项所做的更改在 POST 上更新?
使用 for
循环生成元素,因为它会为 属性 名称添加索引,模型绑定器使用这些名称绑定到 post 上的列表不适用于 foreach
:
@for (int i=0; i< Model.Signatures.Count; i++)
{
<div class="text-center">
<label asp-for="@Model.Signatures[i].Title"></label>
<input asp-for="@Model.Signatures[i].Title" />
<label asp-for="@Model.Signatures[i].Email"></label>
<input asp-for="@Model.Signatures[i].Email" />
<label asp-for="@Model.Signatures[i].Date"></label>
<input disabled asp-for="@Model.Signatures[i].Date">
</div>
}
现在元素将使用 Signatures[0].Title
、Signatures[1].Title
等名称呈现,模型绑定器可以将其绑定到 post 上的模型。
希望对您有所帮助。
我有 class 个 Signature
个对象:
public class Signature
{
public int SignatureID { get; set; }
public int FormID { get; set; }
public string Title { get; set; }
public string Email { get; set; }
[Display(Name = "Signed Date:")]
public DateTime? Date { get; set; }
}
我有一个 Form.cs
class 有一个虚拟签名列表
public virtual List<Signature> Signatures { get; set; }
在我的控制器中,我通过以下方式填充列表:
form.Signatures = repository.Signatures.Where(s => s.FormID == form.FormID).ToList();
在我的表单视图中,我显示了相关签名的列表:
@foreach (var signature in Model.Signatures)
{
<div class="text-center">
<label asp-for="@signature.Title"></label>
<input asp-for="@signature.Title" />
<label asp-for="@signature.Email"></label>
<input asp-for="@signature.Email" />
<label asp-for="@signature.Date"></label>
<input disabled asp-for="@signature.Date">
</div>
}
但是,我不知道如何根据我的 POST 表单方法更新关联的签名。例如,如果我更改签名的 Email
属性 和表单的 POST,模型不会将此更改绑定到 Form
对象。在这种情况下,form.Signatures
为空。
如何确保对与表单关联的 <List>Signature
项所做的更改在 POST 上更新?
使用 for
循环生成元素,因为它会为 属性 名称添加索引,模型绑定器使用这些名称绑定到 post 上的列表不适用于 foreach
:
@for (int i=0; i< Model.Signatures.Count; i++)
{
<div class="text-center">
<label asp-for="@Model.Signatures[i].Title"></label>
<input asp-for="@Model.Signatures[i].Title" />
<label asp-for="@Model.Signatures[i].Email"></label>
<input asp-for="@Model.Signatures[i].Email" />
<label asp-for="@Model.Signatures[i].Date"></label>
<input disabled asp-for="@Model.Signatures[i].Date">
</div>
}
现在元素将使用 Signatures[0].Title
、Signatures[1].Title
等名称呈现,模型绑定器可以将其绑定到 post 上的模型。
希望对您有所帮助。