首页 > 解决方案 > CSHTML editable fields for multiple models in one to many database model

问题描述

I created a form that pushes data to two tables in a database. The header information of the form pushes as a single entry in one table and then as multiple lines on the other table that reference the entry on the first table. One to many relationship.

I need to be able to edit the information in the form. I'm able get the header information to render into editable fields, but I'm not able to for the multiple line level information.

Here is my model:

using CustomerPortal.Identity.Models;
using Microsoft.AspNetCore.Mvc.Rendering;
using System;
using System.Collections.Generic;

namespace CustomerPortal.Models
{
    public class EventViewModel
    {
        public string CustomerPONumber { get; set; }
        public string SupplierReferenceNumber { get; set; }
        public string CarrierProNumber { get; set; }
        public IEnumerable<CarrierEventItem> CarrierEventItems { get; set; }
    }
}

The IEnumerable references the CarrierEventItems table.

On the CSHTML page I am able to render the event fields as a editable:

@model EventViewModel

<div class="list-item">
    <h3>Cust PO Number</h3>
        @Html.TextBoxFor(m => m.CustomerPONumber)
</div>

 @foreach (var carrierEventItem in @Model.CarrierEventItems)
     {

          <div class="list-item">
              <h3>Customer Item</h3>
              <ul>
                  <li>
                     Customer Item Number: @carrierEventItem.CustomerItemNumber
                  </li>
              </ul>
           </div>
     }

I'm haven't been able to get the CarrierEventItem fields to be editable, and I've just been able to display them.

Any help on the html I have to do would be appreciated!

标签: razor

解决方案


我能够很容易地解决这个问题,而不是在单独的 html div 中输入每个字段,Razor 会自动将字段呈现为可编辑:

    <div class="col-12">
        @foreach (var carrierEventItem in @Model.CarrierEventItems)
            {

                <div class="list-item">
                    <h3>Customer Item</h3>

                    @Html.EditorFor(m => carrierEventItem)

                </div>
            }
     </div>

推荐阅读