C# 在ASP.NET核心MVC中获取和发布问题#

C# 在ASP.NET核心MVC中获取和发布问题#,c#,asp.net-core-mvc,C#,Asp.net Core Mvc,我的HttpPost编辑任务没有提供我的EventMembers列表。我在GET上放了一块手表,用于编辑任务,它可以很好地读取我的EventMembers。但是,当我收到帖子“编辑”时,EventMembers只会在我的观察窗口中显示System.Collections.Generic.List`1[System.String],以及视图中的输入框。发生了什么事 型号: public class Event { [Required] public int

我的HttpPost编辑任务没有提供我的EventMembers列表。我在GET上放了一块手表,用于编辑任务,它可以很好地读取我的EventMembers。但是,当我收到帖子“编辑”时,EventMembers只会在我的观察窗口中显示System.Collections.Generic.List`1[System.String],以及视图中的输入框。发生了什么事

型号:

public class Event
    {
        [Required]
        public int EventId { get; set; }

        [ForeignKey("UserId")]
        public virtual SchedulerUser SchedulerUser { get; set; }

        [MaxLength(50)]
        public string EventCreator { get; set; }

        public List<string> EventMembers { get; set; }

        [Required]
        [MaxLength(100)]
        public string Subject { get; set; }

        [MaxLength(400)]
        public string Description { get; set; }

        [Required]
        public DateTime StartTime { get; set; }

        public DateTime? EndTime { get; set; }

        [Required]
        public bool IsFullDay { get; set; }

        [Required]
        public bool AcceptOrDecline { get; set; }

    }
公共类事件
{
[必需]
public int EventId{get;set;}
[外键(“用户ID”)]
公共虚拟调度程序调度程序{get;set;}
[MaxLength(50)]
公共字符串EventCreator{get;set;}
公共列表事件成员{get;set;}
[必需]
[MaxLength(100)]
公共字符串主题{get;set;}
[MaxLength(400)]
公共字符串说明{get;set;}
[必需]
公共日期时间开始时间{get;set;}
公共日期时间?结束时间{get;set;}
[必需]
公共bool IsFullDay{get;set;}
[必需]
公共布尔接受器折线{get;set;}
}
控制器:

// GET: Events/Edit/5
        public async Task<IActionResult> Edit(int? id)
        {
            if (id == null)
            {
                return NotFound();
            }

            var @event = await _context.Events.FindAsync(id);
            if (@event == null)
            {
                return NotFound();
            }
            return View(@event);
        }

// POST: Events/Edit/5
        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Edit(int id, [Bind("EventId,UserId,EventCreator,EventMembers,Subject,Description,StartTime,EndTime,IsFullDay,AcceptOrDecline")] Event @event)
        {
            if (id != @event.EventId)
            {
                return NotFound();
            }

            if (ModelState.IsValid)
            {
                try
                {
                    @event.SchedulerUser = await _userManager.GetUserAsync(HttpContext.User);
                  
                    _context.Update(@event);

                    if (@event.AcceptOrDecline == false)
                    {
                        _context.Remove(@event);
                    }
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!EventExists(@event.EventId))
                    {
                        return NotFound();
                    }
                    else
                    {
                        throw;
                    }
                }
                return RedirectToAction(nameof(Index));
            }
            return View(@event);
        }
//GET:Events/Edit/5
公共异步任务编辑(int?id)
{
if(id==null)
{
返回NotFound();
}
var@event=wait_context.Events.FindAsync(id);
如果(@event==null)
{
返回NotFound();
}
返回视图(@event);
}
//发布:事件/编辑/5
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务编辑(int-id,[Bind(“EventId,UserId,EventCreator,EventMembers,Subject,Description,StartTime,EndTime,IsFullDay,AcceptOrDecline”)]Event@Event)
{
如果(id!=@event.EventId)
{
返回NotFound();
}
if(ModelState.IsValid)
{
尝试
{
@event.scheduleuser=await _userManager.GetUserAsync(HttpContext.User);
_context.Update(@event);
如果(@event.AcceptOrDecline==false)
{
_删除(@event);
}
wait_context.SaveChangesAsync();
}
catch(DbUpdateConcurrencyException)
{
如果(!EventExists(@event.EventId))
{
返回NotFound();
}
其他的
{
投掷;
}
}
返回重定向到操作(名称(索引));
}
返回视图(@event);
}
视图:

@model Scheduler.Models.Event
@{
ViewData[“标题”]=“编辑”;
Layout=“~/Views/Shared/_Layout.cshtml”;
}
编辑
事件

开始时间 结束时间 整天 认可的 取消选中此项可拒绝邀请。活动将从您的日程中删除

返回列表 @节脚本{ @{wait Html.RenderPartialAsync(“_validationScript”);} }
由于您的EventMembers模型属性是一个可枚举列表,因此应该为表示该属性的Html控件编制索引

<div class="form-group">
   <label asp-for="EventMembers[0]" class="control-label"></label>
   <input asp-for="EventMembers[0]" class="form-control" />
   <span asp-validation-for="EventMembers[0]" class="text-danger"></span>
</div>
<div class="form-group">
   ...
   <input asp-for="EventMembers[1]" class="form-control" />
   ...
</div>

...
...
最佳实践是在循环内生成控件

@for (int i = 0; i < Model.EventMembers.Count; i++)
{
    <div class="form-group">
      ...
      <input asp-for="EventMembers[i]" class="form-control" />
      ...
    </div>
}
@for(int i=0;i
EventMembers是输入字符串而不是集合,此字段的值是多少?您不能用视图中给出的单个文本框来表示可枚举属性:input asp for=“EventMembers”。它应该像asp for=“EventMembers[0]”那样编制索引这很好,很有意义。现在,我如何确保在用户页面上有足够的文本框?每个事件将有不同数量的事件成员。您是否使用foreach循环在查看页面中循环类似的内容?@elementmg修改了我的答案,您可以使用for循环OK谢谢!今天我学到了一些新东西!
@for (int i = 0; i < Model.EventMembers.Count; i++)
{
    <div class="form-group">
      ...
      <input asp-for="EventMembers[i]" class="form-control" />
      ...
    </div>
}