【问题标题】:Asp.Net Core MultiSelect SelectList Post ProblemAsp.Net Core MultiSelect SelectList 发布问题
【发布时间】:2022-01-01 16:56:30
【问题描述】:

当我提交表单时,用户技能就来了。我使用多对多关系,但在发布操作时总是计数为 0

public class User : IEntity
{
    [Key]
    public int id { get; set; }
    public Guid userID { get; set; }
    public string mongoUserID { get; set; }
    public string username { get; set; }
    public string password { get; set; }
    public string repassword { get; set; }
    public string role { get; set; }
    public string name { get; set; }
    public string surname { get; set; }
    public string email { get; set; }
    public string phone { get; set; }
    public string title { get; set; }
    public string education { get; set; }
    public string location { get; set; }
    public DateTime? birthday { get; set; }
    public string image { get; set; } = "user.png";
    public bool isActive { get; set; } = true;
    public DateTime createdAt { get; set; } = DateTime.Now;
    public DateTime? updatedAt { get; set; }
    public IList<UserSkill> UserSkills { get; set; }
}

public class Skill : IEntity
{
    [Key]
    public int id { get; set; }
    public Guid skillID { get; set; }
    public string mongoSkillID { get; set; }
    public string name { get; set; }
    public bool isactive { get; set; } = true;
    public DateTime createdAt { get; set; } = DateTime.Now;
    public DateTime? updatedAt { get; set; }
    public IList<UserSkill> UserSkills { get; set; }
}

public class UserSkill
{
    public int UserId { get; set; }
    public User User { get; set; }
    public int SkillId { get; set; }
    public Skill Skill { get; set; }
}

[HttpGet]
public async Task<IActionResult> adduser()
{
    var skills = await _skillService.GetListByFilter();
    if (skills.Count > 0)
    {
        ViewBag.Skills = skills.Select(x => new SelectListItem()
        {
            Value = x.id.ToString(),
            Text = x.name
        });
    }
    return View();
}
[HttpPost]
public async Task<IActionResult> adduser(User user)
{
    
}

<div class="form-group col-md-6">
     <label>User Skills</label>
     <select name="UserSkills" asp-for="UserSkills" asp-items="@(new SelectList(ViewBag.Skills,"Value", "Text"))" class="form-control select2" multiple="multiple" data-placeholder="Select a Skills" style="width: 100%;"></select>
</div>

【问题讨论】:

  • 有人吗:)

标签: asp.net asp.net-core selectlist


【解决方案1】:

尝试在User中添加一个List&lt;int&gt;类型的属性类型数据来绑定选中的skillid。

public class User : IEntity
{
    ...
    public List<int> SelectedSkillIds { get; set; }
}

然后尝试将&lt;select&gt;&lt;/select&gt;的名称更改为SelectedSkillIds。因为.net核心绑定数据与name属性。

<div class="form-group col-md-6">
     <label>User Skills</label>
     <select name="SelectedSkillIds" asp-items="@(new SelectList(ViewBag.Skills,"Value", "Text"))" class="form-control select2" multiple="multiple" data-placeholder="Select a Skills" style="width: 100%;"></select>
</div>

【讨论】:

    【解决方案2】:

    您需要在ViewModel 中有一个类似SelectedUserSkillId 的新属性并将其绑定到select

    public class User: IEntity
    {
        [Key]
        public int id { get; set; }
        ...
        public IList<UserSkill> UserSkills { get; set; }
        public List<string> SelectedUserSkillIds { get; set; } //--> Add a new property
    }
    

    另外,您需要向select表明这一点

    <div class="form-group col-md-6">
         <label>User Skills</label>
         <select name="SelectedUserSkillIds" asp-for="SelectedUserSkillIds" asp-items="@(new SelectList(ViewBag.Skills,"Value", "Text"))" class="form-control select2" multiple="multiple" data-placeholder="Select a Skills" style="width: 100%;"></select>
    </div>
    

    见:Select Tag Helper in ASP.NET Core MVC

    【讨论】:

    • 感谢您的回答,但没有用。
    • 什么不完全有效?
    • 当我提交表单时,用户技能计数为 0(零)。
    • 你确定你检查的是SelectedUserSkillIds,而不是UserSkills
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多