You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core中多选值无法传递至控制器问题求助

问题:Multiselect多选值无法传入数据库,Clusters始终为null

我尝试用Multiselect多选功能选择多个值并存入数据库,但始终失败,Clusters字段一直是null。

模型多对多关系

public class Cluster : IEntityBase<string>
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public string Id { get; set; }
    [Required]
    public string Name { get; set; }
    public IEnumerable<Sensor> Sensors { get; set; }
}
public class Sensor : IEntityBase<string>
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public string Id { get; set; }
    public string Name { get; set; }
    public IEnumerable<Cluster> Clusters { get; set; } 
    [ForeignKey("SensorType")]
    public string SensorTypeId { get; set; }
    public SensorType SensorType { get; set; }
}

仓储模式代码

private readonly ApplicationDbContext _db; 
public SensorRepository(ApplicationDbContext db) {
 _db = db; 
}

public void Add(SensorVM entity)
{       
    Sensor mappedSensor = new Sensor()
    {
        Id = entity.Id,
        Name = entity.Name,
        Clusters = entity.Clusters,
        SensorTypeId = entity.SensorTypeId,
        SensorType = entity.SensorType,
        APIUrl = entity.APIUrl,
        X = entity.X,
        Y = entity.Y,
        Configuration = entity.Configuration,
        ConfigurationSchema = schema.ToJson(),
        SerialNumber = entity.SerialNumber,
        Interval = entity.Interval,
        IsActive = entity.IsActive
    };                        
    _db.Sensors.Add(mappedSensor);
    _db.SaveChanges();                        
}

控制器代码

[HttpGet]
public IActionResult Add()
{                        
    IEnumerable<Cluster> getClusters = _clusterRepository.GetAll().ToList();
    ViewData["Clusters"] = new MultiSelectList(getClusters, "Id", "Name");
    ...
    return View();
}

[HttpPost]
public IActionResult Add(SensorVM obj)
{
    if (ModelState.IsValid)
    {                
        _sensorRepository.Add(obj);
        return RedirectToAction("Index");
    }
    return View(obj);
}

视图代码

<div class="form-floating py-2 col-12">
    <select asp-for="Clusters" asp-items="(MultiSelectList)@ViewData["Clusters"]" multiselect-search="true" multiple placeholder="-Select Clusters-">
    <span asp-validation-for="Clusters" class="text-danger"></span>
    </select>
</div>

我怀疑是缺少ID列表处理逻辑,或是没给MultiSelectList的selectedValues参数赋值。数据库已经通过多对多关系生成了包含SensorId和ClusterId的ClusterSensor中间表。


内容的提问来源于stack exchange,提问作者glidziR99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 19:16:17