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>

SelectList not从模型中选择保存的值

这就是通常渲染下拉列表并选择项目作为所选选项的方法。

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")
}