Asp.net-Mvc

將對象列表綁定到表單

  • March 19, 2018

我有一類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具有虛擬簽名列表的類

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循環生成元素,因為它會為模型綁定器使用的屬性名稱添加索引以綁定到文章上的列表,這不適用於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].TitleSignatures[1].Title並且模型綁定器可以將其綁定到 post 上的模型。

希望能幫助到你。

引用自:https://stackoverflow.com/questions/49365019