1

I have project with ASP.Net Core MVC, EF Core 2.0. There is a Person and Phone entity with a "one-to-many" relationship, i.e. each Person entity can contain many phones or none. When generating a standard controller, a view was also generated. The problem is that when creating the Person entity, the user should be able to add a phone, one or more. Many-day google did not give anything, probably because I do not know how to designate this in the search.

How to create a view with the ability to dynamically add related entities? In other words, how to create and add programmatically to the ICollection<Phone> Phone collection new Phone entities?

Model:

public partial class Person {

        public Person() {
            Phone = new HashSet<Phone>();
        }

        public int Id { get; set; }
        public string Name { get; set; }

        public ICollection<Phone> Phone { get; set; }
    }
}

public partial class Phone {

    public int Id { get; set; }
    public int Type { get; set; }
    public int Number { get; set; }
    public int? PersonId { get; set; }

    public Person Person { get; set; }
}

public partial class ModelContext : DbContext {
    protected override void OnModelCreating(ModelBuilder modelBuilder) {

        modelBuilder.Entity<Person>(entity => {
            entity.Property(e => e.Name).HasMaxLength(50).IsRequired();
        });

        modelBuilder.Entity<Phone>(entity => {
            entity.HasOne(d => d.Person)
                .WithMany(p => p.Phone)
                .HasForeignKey(d => d.PersonId)
                .HasConstraintName("FK_Phone_Person");
        });
    }
}

Generated View:

@model xxx.Models.Person

@{
    ViewData["Title"] = "Create";
}

<h2>Create</h2>

<h4>Person</h4>
<hr />
<div class="row">
<div class="col-md-4">
    <form asp-action="Create">
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        <div class="form-group">
            <label asp-for="FirstName" class="control-label"></label>
            <input asp-for="FirstName" class="form-control" />
            <span asp-validation-for="FirstName" class="text-danger"></span>
        </div>
        <div class="form-group">
            <input type="submit" value="Create" class="btn btn-default" />
        </div>
    </form>
</div>
</div>

<div>
    <a asp-action="Index">Back to List</a>
</div>

@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
XelaNimed
  • 301
  • 5
  • 18
  • Refer [this answer](http://stackoverflow.com/questions/28019793/submit-same-partial-view-called-multiple-times-data-to-controller/28081308#28081308) for some options (note you need [this implementation of BeginCollectionItem](https://www.nuget.org/packages/BeginCollectionItemCore) for core-mvc) –  Nov 08 '17 at 07:49
  • Refer also [this answer](http://stackoverflow.com/questions/40539321/partial-view-passing-a-collection-using-the-html-begincollectionitem-helper/40541892#40541892) for a detailed implementation using `BeginCollectionItem` –  Nov 08 '17 at 07:57

0 Answers0