ASP.NET Core 8 MVC:如何多选有多个通过?

kyvafyod  于 5个月前  发布在  .NET
关注(0)|答案(1)|浏览(98)

我是新来的ASP.NET核心8,我有麻烦搞清楚如何设置一个多选框。在Compitem创建视图,我想有一个多个可选字段的电子邮件地址。这样的人可以选择任何数量的电子邮件分配项目。
我尝试过的都不起作用。应该如何设置?目前没有错误,但该字段不显示任何可供选择的内容。
DbContext

public virtual DbSet<Compitem> Compitems { get; set; }
    public virtual DbSet<Email> Emails { get; set; }
    public virtual DbSet<EmailCompitem> EmailCompitems { get; set; }

    modelBuilder.Entity<Compitem>(entity =>
    {
        entity.HasKey(e => e.Id).HasName("PK__compitem__3213E83FEE3293C2");

        entity.ToTable("compitems");

        entity.HasIndex(e => e.CompProgramId, "index_compitems_on_program_id");

        entity.HasIndex(e => e.StatusId, "index_compitems_on_status_id");

        entity.Property(e => e.Id).HasColumnName("id");
        entity.Property(e => e.CompProgramId).HasColumnName("compProgram_id");
        entity.Property(e => e.CreatedAt)
            .HasPrecision(6)
            .HasColumnName("created_at");
        entity.Property(e => e.DueDate)
            .HasColumnType("datetime")
            .HasColumnName("due_date");
        entity.Property(e => e.EndTime)
            .HasColumnType("datetime")
            .HasColumnName("end_time");
        entity.Property(e => e.Frequency)
            .HasMaxLength(4000)
            .HasColumnName("frequency");
        entity.Property(e => e.FrequencyId).HasColumnName("frequency_id");
        entity.Property(e => e.Name)
            .HasMaxLength(4000)
            .HasColumnName("name");
        entity.Property(e => e.Notes).HasColumnName("notes");
        entity.Property(e => e.Program)
            .HasMaxLength(4000)
            .HasColumnName("program");
        entity.Property(e => e.StartTime)
            .HasColumnType("datetime")
            .HasColumnName("start_time");
        entity.Property(e => e.StatusId).HasColumnName("status_id");
        entity.Property(e => e.UpdatedAt)
            .HasPrecision(6)
            .HasColumnName("updated_at");

        entity.HasOne(d => d.CompProgram).WithMany(p => p.Compitems)
            .HasForeignKey(d => d.CompProgramId)
            .OnDelete(DeleteBehavior.ClientSetNull)
            .HasConstraintName("fk_rails_eeb0d52db2");

        entity.HasOne(d => d.FrequencyNavigation).WithMany(p => p.Compitems)
            .HasForeignKey(d => d.FrequencyId)
            .HasConstraintName("FK_compitems_compitems");

        entity.HasOne(d => d.Status).WithMany(p => p.Compitems)
            .HasForeignKey(d => d.StatusId)
            .HasConstraintName("fk_rails_d7cd87e965");

                entity.HasMany(c => c.EmailCompitems)
                .WithOne(e => e.Compitem)
                .HasForeignKey(e => e.CompitemId)
                .HasConstraintName("fk_rails_c955c06548")
                .OnDelete(DeleteBehavior.Cascade);
    });

    modelBuilder.Entity<Email>(entity =>
    {
        entity.HasKey(e => e.Id).HasName("PK__emails__3213E83F90E488B6");

        entity.ToTable("emails");

        entity.Property(e => e.Id).HasColumnName("id");
        entity.Property(e => e.CreatedAt)
            .HasPrecision(6)
            .HasColumnName("created_at");
        entity.Property(e => e.Email1)
            .HasMaxLength(4000)
            .HasColumnName("email");
        entity.Property(e => e.UpdatedAt)
            .HasPrecision(6)
            .HasColumnName("updated_at");
    });

    modelBuilder.Entity<EmailCompitem>(entity =>
    {
        entity.HasKey(e => e.Id).HasName("PK__email_co__3213E83FF6AC7B82");

        entity.ToTable("email_compitems");

        entity.HasIndex(e => e.CompitemId, "index_email_compitems_on_compitem_id");

        entity.HasIndex(e => e.EmailId, "index_email_compitems_on_email_id");

        entity.Property(e => e.Id).HasColumnName("id");
        entity.Property(e => e.CompitemId).HasColumnName("compitem_id");
        entity.Property(e => e.CreatedAt)
            .HasPrecision(6)
            .HasColumnName("created_at");
        entity.Property(e => e.EmailId).HasColumnName("email_id");
        entity.Property(e => e.UpdatedAt)
            .HasPrecision(6)
            .HasColumnName("updated_at");

        entity.HasOne(d => d.Compitem).WithMany(p => p.EmailCompitems)
            .HasForeignKey(d => d.CompitemId)
             .OnDelete(DeleteBehavior.Cascade)
            .HasConstraintName("fk_rails_c955c06548");

        entity.HasOne(d => d.Email).WithMany(p => p.EmailCompitems)
            .HasForeignKey(d => d.EmailId)
            .OnDelete(DeleteBehavior.ClientSetNull)
            .HasConstraintName("fk_rails_e3e4c10f10");
    });

字符串
Compitem.Create

public IActionResult Create()
 {
    ViewData["CompProgramId"] = new SelectList(_context.CompPrograms, "Id", "Title");
    ViewData["FrequencyId"] = new SelectList(_context.Frequencies, "Id", "Title");
    ViewData["StatusId"] = new SelectList(_context.Statuses, "Id", "Title");
    ViewData["EmailValues"] = new SelectList(_context.Emails, "Id", "Email");
    return View();
 }


Create.cshtml

<div class="form-group">
     <label asp-for="EmailValues" class="control-label">Select Email</label>
     <select asp-for="EmailValues" asp-items="ViewBag.EmailValues"></select>
     <span asp-validation-for="EmailValues" class="text-danger"></span>
 </div>


完整项目型号:

public partial class Compitem
{
    public long Id { get; set; }
    public string Name { get; set; }
    public string Program { get; set; }
    public string Frequency { get; set; }
    public string Notes { get; set; }

    public DateTime? StartTime { get; set; }
    public DateTime? EndTime { get; set; }
    public DateTime? DueDate { get; set; }

    public DateTime CreatedAt { get; set; } = DateTime.Now;
    public DateTime UpdatedAt { get; set; } = DateTime.Now;

    public long CompProgramId { get; set; }
    public long? FrequencyId { get; set; }
    public long? StatusId { get; set; }

    public virtual ICollection<Comment> Comments { get; set; } = new List<Comment>();

    public virtual CompProgram CompProgram { get; set; }

    public virtual ICollection<EmailCompitem> EmailCompitems { get; set; } = new List<EmailCompitem>();

    public virtual Frequency FrequencyNavigation { get; set; }

    public virtual Status Status { get; set; }

    [NotMapped]
    [DataType(DataType.Upload)]
    public List<IFormFile> FileAttachments { get; set; }

    // Additional properties for file metadata (optional, depending on your requirements)
    public List<string> FileNames { get; set; } = new List<string>();
    public List<string> FilePaths { get; set; } = new List<string>();

    public List<string> EmailValues { get; set; } = new List<string>();
}


EmailCompitems型号:

public partial class EmailCompitem
{
    public long Id { get; set; }
    public long EmailId { get; set; }
    public long CompitemId { get; set; }

    public DateTime CreatedAt { get; set; }
    public DateTime UpdatedAt { get; set; }

    public virtual Compitem Compitem { get; set; }
    public virtual Email Email { get; set; }
}


电子邮件型号:

public partial class Email
{
    public long Id { get; set; }
    public string Email1 { get; set; }
    public DateTime CreatedAt { get; set; }
    public DateTime UpdatedAt { get; set; }

    public virtual ICollection<EmailCompitem> EmailCompitems { get; set; } = new List<EmailCompitem>();
}

hfyxw5xn

hfyxw5xn1#

目前没有错误,但该字段不显示任何可供选择的内容
在你的Email类中,属性名是“Email1”,而不是“Email”,所以在创建SelectList时,你应该使用“Email1”:

ViewData["EmailValues"] = new SelectList(_context.Emails, "Id", "Email1");

字符串
在Compitem创建视图中,我希望有一个多电子邮件地址可选字段。因此,该人可以选择任何数量的电子邮件分配到该项目。
您可以使用Bootstrap Select插件应用到您的下拉列表中,实现多选功能,允许用户选择多个地址并进行后续处理。这里有一个示例,您可以参考:
我的创建操作:

public IActionResult Create()
  {     
      ViewData["EmailValues"] = new SelectList(_context.Emails.ToList(), "Id", "Email1");
      return View();
            
  }


我的页面:

<form asp-action="Create" method="post">
    <button type="submit" class="btn btn-primary">Create</button>
        <div class="form-group">
        <label asp-for="EmailValues" class="control-label">Select Email</label>
        <select asp-for="EmailValues" asp-items="@ViewBag.EmailValues" class="selectpicker form-control"></select>
        <span asp-validation-for="EmailValues" class="text-danger"></span>
        </div>
    </form> 
@section scripts {
<link rel="stylesheet" href=https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css>
<link rel="stylesheet" href=https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.1/css/bootstrap-select.css />
<script src=https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js></script>
<script src=https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.bundle.min.js></script>
<script src=https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.1/js/bootstrap-select.min.js></script>

<script type="text/javascript">
     $(document).ready(function () {
         $('.Email').selectpicker();
            
     });
</script>
    }


当我选择电子邮件时:
100d1x

的字符串

相关问题