【问题标题】:ASP.NET Core MVC : view model IList to ICollectionASP.NET Core MVC:查看模型 IList 到 ICollection
【发布时间】:2020-07-25 06:25:18
【问题描述】:

我当前的视图模型:

public class CustomerVM
{
     public string fname;
     public virtual IList<DocumentVM>? Documents { get; set; } = null!;
}

public class DocumentVM
{
     public string UniqueNo;
     ...some code ommitted
}

以下是Chtml设计。一个客户可以填写二维文件。

...some code ommited
 <div class="form-group col-md-3">
    <label asp-for="customer.FirstName" class="col-form-label"></label>
     <input asp-for="customer.FirstName" class="form-control" />
     <span asp-validation-for="customer.FirstName" type="text" class="text-danger"></span>
    </div>
 
    <div class="form-group col-md-4">
        <label asp-for="customer.Documents[0].DocTypeId" class="col-form-label">Document Type</label>
        <select asp-for="customer.Documents[0].DocTypeId" asp-items="@Model.customer.DocumentTypeList" class="form-control">
            <option>Choose</option>
        </select>
    </div>

    <div class="form-group col-md-3">
        <label asp-for="customer.Documents[0].UniqueNo" class="col-form-label"></label>
        <input asp-for="customer.Documents[0].UniqueNo" type="text" class="form-control" />
        <span asp-validation-for="customer.Documents[0].UniqueNo" class="text-danger"></span>
    </div> 
    <div class="form-group col-md-4">
        <label asp-for="customer.Documents[1].DocTypeId" class="col-form-label">Document Type</label>
        <select asp-for="customer.Documents[1].DocTypeId" asp-items="@Model.customer.DocumentTypeList" class="form-control">
            <option>Choose</option>
        </select>
    </div>

    <div class="form-group col-md-3">
        <label asp-for="customer.Documents[1].UniqueNo" class="col-form-label"></label>
        <input asp-for="customer.Documents[1].UniqueNo" type="text" class="form-control" />
        <span asp-validation-for="customer.Documents[1].UniqueNo" class="text-danger"></span>
    </div>
                 

此代码完美运行。但我需要更改我的视图模型 Customer

 public virtual IList<DocumentVM>? Documents { get; set; } = null!;

 public virtual ICollection<DocumentVM>? Documents { get; set; } = null!;

我无法从 Razor 视图直接访问索引。是否可以在 ASP.NET Core 3.1 中将我的视图设计更改 IList 更改为 ICollection 对象?

提前致谢

【问题讨论】:

  • 合并集合是什么意思?
  • 您是如何在 Razor 视图中引用此文档集合的。您可以使用 IEnumerable 代替 ICollection,Razor 视图也将使用相同的方法。
  • 问题已更新..我需要将 2 个文档添加到 icollection 对象并提交表单..正在访问 Documents[1] 和 document [2] 索引硬编码..是否可以动态地做
  • 这实际上是带有 2 个文档(即文档列表)的客户视图,最后提交表单..

标签: c# asp.net-core model-view-controller


【解决方案1】:

你想在表单提交时保存多个文档,所以表单渲染使用for循环,它将根据集合填充强类型控件并可以相应地提交。

for (int i = 0; i < Model.Count; i++)
{
    @Html.LabelFor(m => m[i].UniqueNo)
    @Html.TextBoxFor(m => m[i].UniqueNo)....
 }

【讨论】:

  • 最初查看customer.Documents时为null,怎么算?
  • 您要求添加 2 个文档,而不是 i&lt;Model.Count 您可以使用 i
  • 标签助手@Ajt 是什么意思?我的回答对你有用吗?如果是这样,请接受并投票。
猜你喜欢
  • 1970-01-01
  • 2010-10-13
  • 2021-06-29
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
相关资源
最近更新 更多