【发布时间】: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