SelectList not从模型中选择保存的值
本文关键字:保存 选择 not 模型 SelectList | 更新日期: 2023-09-27 18:25:45
我有一个select List,它应该默认从模型中保存的值。但是,它并没有选择默认值(选中了inspect元素)。我在其他地方为SelectLists使用了类似的代码,这些代码可以正常工作。
这是我的代码,但没有工作:
var techs = new HashSet<Guid>(db.usersInRoles.Where(u => u.RoleId == new Guid(Properties.Settings.Default.TechID)).Select(u => u.UserId));
ViewBag.TechnicianId = from user in db.Users
join tech in techs on user.UserId equals tech
where user.Status == 1
orderby user.FirstName
select new { TechnicianId = user.UserId, FullName = user.FirstName + " " + user.LastName };
和视图:
<span style="font-weight:normal;">@Html.DropDownListFor(m => m.TechnicianId, new SelectList(ViewBag.TechnicianId, "TechnicianId", "FullName"))</span>
在找到这个问题和这个问题后,我修改了我的观点如下:
<span style="font-weight:normal;">@Html.DropDownListFor(m => m.TechnicianId, new SelectList(ViewBag.TechnicianId, "TechnicianId", "FullName", @Model.TechnicianId))</span>
不幸的是,它仍然没有从模型中获得默认值。我不想为了做一些简单的事情而改变我的模型(正如其中一个链接中所建议的那样)。
这是正在工作的代码(对我来说也是一样的):
ViewBag.Category = db.Categories.Where(c => c.Status == 1);
和视图:
<span style="font-weight:normal;">@Html.DropDownListFor(m =>
m.CategoryId, new SelectList(ViewBag.Category, "CategoryId", "CategoryName"))</span>
这就是通常渲染下拉列表并选择项目作为所选选项的方法。
public class CreateOrdeViewModel
{
public List<SelectListItem> TechList {set;get;}
public int SelectedTech {set;get;}
//Your other viewmodel properties also goes here
}
并且,在您的GET操作方法中:
public ActionResult Edit(int id)
{
var vm = new CreateOrderViewModel();
var order = dbContext.Orders.FirstOrDefault(s=>s.Id==id);
vm.TechList = GetItems();
//This is where you set the selected value which you read from db
vm.SelectedTech = order.SelectedTechId;
return View(vm);
}
private List<SelectListItem> GetItems()
{
// just for demo. You may change the LINQ query to get your data.
// Just make sure to return a List<SelectListItem>
return db.Users.Select(s => new SelectListItem
{
Value = s.Id.ToString(),
Text = s.Name
}).ToList();
}
而且,在你看来:
@model CreateOrderViewModel
@using(Html.BeginForm())
{
@Html.DropDownListFor(s => s.SelectedTech, Model.TechList,"s")
}