【问题标题】:Set SelectedValue from ViewBag DotNet Core从 ViewBag DotNet Core 设置 SelectedValue
【发布时间】:2021-10-30 15:57:51
【问题描述】:

我有以下型号:

public class ActivityType
{
     [Key]
     public int ActivityTypeId { get; set; }
     public string ActivityTypeName { get; set; }
}

public class ActivitySubType
{
     [Key]
     public int ActivitySubTypeId { get; set; }
     public string ActivitySubTypeName { get; set; }
     [ForeignKey("ActivityType")]
     public int ActivityTypeId { get; set; }
     public virtual ActivityType ActivityType { get; set; }
}

public class ActivityRecord
{
     [Key]
     public int ActivityRecordId { get; set; }
     public string ActivityName  { get; set; }
     [ForeignKey("ActivitySubType")]
     public int ActivitySubTypeId { get; set; }
     public virtual ActivitySubType ActivitySubType { get; set; }
}

然后从模型ActivityRecord,我有一个控制器可以保存到数据库中。我正在使用脚手架控制器自动生成。在Create 视图中,我创建了一个级联下拉代码。当ActivityType selected时,下拉ActivitySubType将根据数据库上的数据生成项目。它保存到数据库中(成功)。

情况是,当我尝试编辑记录时。如何根据ActivitySubTypeId 的值在ActivityType 下拉列表中绑定ActivityTypeId。我已经通过以下代码得到它:

public async Task<IActionResult> Edit(int? id)
{
     var getActivityTypeId = (from a in _db.ActivityRecords
          join b in _db.ActivitySubTypes ON a.ActivitySubTypeId equals b.ActivitySubTypeId
          join c in _db.ActivityTypes ON b.ActivityTypeId equals c.ActivityTypeId
          where a.ActivitySubType == id
          select new {
               b.ActivityTypeId
          }
     ).FirstOrDefault();

     var activityTypeList = (from a in _db.ActivityTypes
                                select new SelectListItem()
                                {
                                    Text = a.ActivityTypeName, Value = a.ActivityTypeId.ToString()
                                }
           ).ToList();

      activityTypeList.Insert(0, new SelectListItem()
      {
          Text = "Select...",
          Value = ""
      });
      ViewBag.ActivityTypeDropList = activityTypeList;
}

在下拉列表中:

<select id="ActivityTypeId" class="form-control form-control-sm" asp-items="@(new SelectList(ViewBag.ActivityTypeDropList,"Value", "Text"))">
</select>

如何将getActivityTypeId 的结果作为selectedValue 放入ActivityType 的下拉列表中?或者也许有另一种方法来实现这一点?
谢谢。

【问题讨论】:

    标签: c# entity-framework .net-core asp.net-core-5.0


    【解决方案1】:

    好吧,经过反复试验。我找到了答案:

    在观点上:

    <select class="form-control form-control-sm" asp-items="ViewBag.ActivityTypeId"></select>
    

    在控制器上:

    var selectedValue = (from a in _db.ActivityRecords
                                 join b in _db.ActivitySubTypes on a.ActivitySubTypeId equals b.ActivitySubTypeId
                                 join c in _db.ActivityTypes on b.ActivityTypeId equals c.ActivityTypeId
                                 where a.ActivityRecordId == id
                                 select new
                                 {
                                     c.ActivityTypeId
                                 }
                ).FirstOrDefault();
    
    ViewData["ActivityTypeId"] = new SelectList(_db.ActivityTypes, "ActivityTypeId", "ActivityTypeName", selectedValue.ActivityTypeId.ToString());
    

    感谢您的关注。
    干杯,

    【讨论】:

      猜你喜欢
      • 2021-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-29
      • 1970-01-01
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多