【问题标题】:How to set default value of SelectListItem equal to a result of a stored procedure [duplicate]如何将 SelectListItem 的默认值设置为等于存储过程的结果 [重复]
【发布时间】:2018-12-17 13:08:57
【问题描述】:

我有一个从数据库中检索现有数据的存储过程,我想将我的DropDownListFor 设置为等于存储过程结果中的数据的值。这是一个编辑模块。

这是我的控制器代码:

    [HttpPost]
    public ActionResult EditGetProjDetails(int id)
    {
        var vm = new ProjectsViewModel();

        sp_GetProjectDetails_Result result = db_RIRO.sp_GetProjectDetails(id).FirstOrDefault();

        vm.BusinessLineList = db_RIRO.sp_GetAllBusinessLine()
        .Select(a => new SelectListItem
        {
            Value = a.BusinessLineID.ToString(),
            Text = a.BusinessLine,
            Selected = // what code do i put here?
        })
        .ToList();

        vm.ProjectID = result.ProjectID;
        vm.BusinessUnit = result.BusinessUnit;

        return PartialView("~/Views/Project/_EditProjDetails.cshtml", vm);

这是我的观点:

 @Html.DropDownListFor(a => a.BusinessLineID, Model.BusinessLineList, new { @class = "form-control input-sm", placeholder = "Business Line", required = "required", autocomplete = "off" })

这是我的 ViewModel:

    public int BusinessLineID { get; set; }
    public List<SelectListItem> BusinessLineList { get; set; }
    public string BusinessLine { get; set; }

解决方案

        var vm = new ProjectsViewModel()
        {
         BusinessLineID = 2
        };

        sp_GetProjectDetails_Result result = db_RIRO.sp_GetProjectDetails(id).FirstOrDefault();

        vm.BusinessLineList = db_RIRO.sp_GetAllBusinessLine()
        .Select(a => new SelectListItem
        {
            Value = a.BusinessLineID.ToString(),
            Text = a.BusinessLine
        })
        .ToList();

        return PartialView("~/Views/Project/_EditProjDetails.cshtml", vm);

【问题讨论】:

  • 您没有设置Selected 属性。你设置BusinessLineID的值
  • @StephenMuecke 嗨。你能帮我解决这个问题吗?您发布的重复答案似乎没有使用存储过程将数据检索到列表中。
  • 存储过程与它没有任何关系(而且我们甚至不知道它返回什么)。仔细阅读骗局。 BusinessLineID 的值决定了选择的内容。在您的代码中,您甚至没有为BusinessLineID 设置值,因此将选择第一个选项(因为必须这样做)。如果BusinessLineID 的值与选项之一的值完全匹配,则将选择该选项。
  • @StephenMuecke 请检查新编辑。我在 ViewModel 上设置了 BusinessLineID 值。如何将Select 上的BusinessLineID 与我设置的值匹配?
  • 对不起,我不明白你的意思。如果您的 sp_GetAllBusinessLine() 包含带有 BusinessLineID = 2 的记录,则在呈现视图时将选择该选项

标签: asp.net asp.net-mvc


【解决方案1】:

您正在遍历所有业务线,然后为每个业务线创建一个包含值和文本的选择列表项列表。

sp_GetProjectDetails_Result 结果具有您要选择的单个业务线 ID?

如果是这样,在每个业务线的循环中,如果 id 与过程中的结果 id 相同,则将选择列表项的 selected 属性设置为 true。

类似:

 Selected = (a.BusinessLineID == result.ID) //or whatever result is from the procedure

【讨论】:

  • 我应该从我的视野中保留代码吗?
  • 错了。绑定到属性时忽略设置SelectListItemSelected 属性。
猜你喜欢
  • 1970-01-01
  • 2016-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-07
  • 1970-01-01
  • 2017-05-07
  • 2012-07-22
相关资源
最近更新 更多